bei Suche Groß und Kleinschreibung ignorieren

thomsonz

Mitglied
Hallo ich möchte bei einer Suche das übermittelte Wort mit LIKE suchen dabei würde ich gerne wollen dass bei der Eingabe des Suchbegriffs es egal ist ob er "suchbegriff" eingibt oder "Suchbegriff". Die Kollation meiner Tabelle steht auf utf8_general_ci und ich dachte ci steht für das Ignorieren der Groß-und Kleinschreibung. Leider werden aber bisher nur mit Hilfe der Funktion ucwords() Ergebnisse erzielt.
Des weiteren muss meine LIKE Abfrage einen Fehler enthalten. da bei der Suche nach "Suchbegriff" der Datensatz gefunden wird nicht aber bei Eingabe "Such"
Hier meine Abfrage:
PHP:
function format($text)
			{
			$text = str_replace("ü", "ü", $text);
			$text = str_replace("ö", "ö", $text);
			$text = str_replace("Ö", "Ö", $text);
			$text = str_replace('ä', 'ä', $text);
			$text = str_replace("Ãœ", "Ü", $text);
			$text = str_replace("ß", "ß", $text);
			// ersten Kleinbuchstaben des Suchbegriffes durch Großbuchstaben ersetzen
			$text = ucwords($text);
			return $text;
			}

foreach ($Suchwoerter as $begriffone)
{
$begriff = format($begriffone);
echo $begriff;
$landquery = "SELECT * FROM alle_laender WHERE kontinent LIKE '%$begriff%' OR landname LIKE '%$begriff%' ORDER BY kontinent LIKE '".$begriff."' DESC, kontinent LIKE '".$begriff."%' DESC, kontinent LIKE '%".$begriff."', landname LIKE '".$begriff."' DESC, landname LIKE '".$begriff."%' DESC, landname LIKE '%".$begriff."' ";
$landsql = mysql_query($landquery) or die(mysql_error());

auch eine Umschreibung in:
PHP:
foreach ($Suchwoerter as $begriffone)
{
$begriff = format($begriffone);
echo $begriff;
$landquery = "SELECT * FROM alle_laender WHERE kontinent LIKE '%".$begriff."%' OR landname LIKE '%".$begriff."%' ORDER BY kontinent LIKE '".$begriff."' DESC, kontinent LIKE '".$begriff."%' DESC, kontinent LIKE '%".$begriff."', landname LIKE '".$begriff."' DESC, landname LIKE '".$begriff."%' DESC, landname LIKE '%".$begriff."' ";
$landsql = mysql_query($landquery) or die(mysql_error());
bringt nicht das gewünschte Ergebnis
Vielleicht hängen die beiden Probleme ja zusammen?:confused:
Danke für eure Mühe
 
PHP:
function format($text)
            {
            $text = str_replace("ü", "ü", $text);
            $text = str_replace("ö", "ö", $text);
            $text = str_replace("Ö", "Ö", $text);
            $text = str_replace('ä', 'ä', $text);
            $text = str_replace("Ãœ", "Ü", $text);
            $text = str_replace("ß", "ß", $text);
            // ersten Kleinbuchstaben des Suchbegriffes durch Großbuchstaben ersetzen
            $text = ucwords($text);
            return $text;
            }

Also, diese Funktion ist eigentlich sinnlos. Die Zeichen die du dort verwendest, entspringen einer falschen Zeichenkodierung, die augenscheinlich aus deinem Formular kommt.
Mache es als UTF-8 kompatibel (gibt es hier genügend Threads im Forum drüber, einfach mal die Suche beanspruchen).

SQL:
ORDER BY kontinent LIKE '".$begriff."' DESC, 
kontinent LIKE '".$begriff."%' DESC, 
kontinent LIKE '%".$begriff."', 
landname LIKE '".$begriff."' DESC, 
landname LIKE '".$begriff."%' DESC, 
landname LIKE '%".$begriff."' ";

Was ist das?
Eine solche Konstruktion habe ich auch noch nicht gesehen. Du vergleichst Inhalte während einer Sortierung? Ist das überhaupt möglich? Meines Erachtens sollte es so aussehen:
SQL:
ORDER BY
  `kontinent` DESC,
  `landname` DESC

Inhaltliche Vergleiche geschehen doch bereits während der WHERE Bedingung.

Ansonsten möchte ich dich bitten, das "Bumpen" von Threads zu unterlassen.. Und das bereits nach einer Stunde.
Danke.
 
Der Ausdruck „foo LIKE bar“ liefert entweder den Wert 0 oder 1. Mit dieser Sortierung versucht Thomas also die Ergebnisse nach der Treffgenauigkeit zu sortieren, also zuerst die direkten Übereinstimmungen, dann die Übereinstimmungen am Anfang der Zeichenketten und dann die Übereinstimmungen am Ende der Zeichenketten.
 
Ja genau das war meine Absicht aber es hängt ja schon alleine bei der Abfrage

PHP:
$landquery = "SELECT * FROM alle_laender WHERE kontinent LIKE '%$begriff%' OR landname LIKE '%$begriff%'";
denn es werden bei der Suche nur exakte Treffer gefunden
mit dem Versenden der falschen Codierung hatte ich mich schon befasst aber noch keine passendere Lösung gefunden als accept-charset im form tag welches aber ebenfalls die Umschreibung in den falschen Codierungen übermittelt (also ü wird als ü übermittelt)
 
Zurück