Vereinfachte Suchfunktion mit AND

Thanatos

Mitglied
Hallo,

ich möchte eine Suchfunktion mit AND machen. Dazu werden in dem Suchformular die Begriffe einfach mit einem Leerzeichen getrennt. Anschließend werden die einzelnen Suchbegriffe mit

$suchen_array = explode(' ',$suchen);

aufgespaltet.

Jetzt mein Problem. Ich möchte maximal nach 3 Wörtern suchen lassen. Dazu habe ich mir überlegt die MySQL-Abfrage folgendermaßen zu gestalten:

PHP:
$abfrage = mysql_query("SELECT * FROM table WHERE inhalt LIKE 
  '%$suchen_array[0]%' AND 
  '%$suchen_array[1]%' AND 
  '%$suchen_array[2]%' OR 
  ueberschrift LIKE 
  '%$suchen_array[0]%' AND 
  '%$suchen_array[1]%' AND 
  '%$suchen_array[2]%'
  ORDER BY ueberschrift ASC");

Doch irgendwie funzt das da oben nicht richtig. Die Variable $suchen_array wird richtig aus ausgelesen, aber die Abfrage der MySQL-Datenbank will einfach nicht klappen. Wo habe ich einen Fehler gemacht ? Eine Fehlermeldung gibt es nicht. Ich hoffe ihr könnt mir helfen :)
Vielleicht kennt ihr ja auch noch eine andere Möglichkeit. Das Such-Tutorial habe ich auch schon ausprobiert. Hab ich auf die Schnelle aber nicht einbinden können. Wenn ihr sagt, dass das oben Schwachsinn ist, dann probiere ich erneut das "vorgefertigte" Skript einzubinden.

Danke fürs Durchlesen. :)
 
Da fällt mir gerade noch was ein:

Wenn ich nur einen Suchbegriff mache, was passiert dann mit
'%$suchen_array[1]%' und '%$suchen_array[2]%' ?
Was habe die dann für Werte ? Liegt da vielleicht der Fehler ?

Habe es schnell mal ausprobiert. Bei mir sind die dann einfach leer. Wirkt sich das auf die Suche aus ?
 
Versuch doch mal die logischen Verknüpfungen (AND und OR) jeweils auf ein Feld zu beziehen:
Code:
SELECT * FROM table 
WHERE inhalt LIKE '%$suchen_array[0]%' 
AND inhalt LIKE '%$suchen_array[1]%' 
AND inhalt LIKE '%$suchen_array[2]%' 
OR ueberschrift LIKE '%$suchen_array[0]%' 
AND ueberschrift LIKE '%$suchen_array[1]%' 
AND ueberschrift LIKE '%$suchen_array[2]%'
Kann aber auch sein, dass ich da falsch liege. Aber normalerweise sollte man jede Bedingung in der Abfrage auf ein bestimmtes Feld beziehen.

PS: Vielleicht solltest Du das nicht statisch mit genau drei Suchbegriffen machen, sondern einfach mit count() die Array-Elemente zählen und dann entsprechend mit einer Schleife die Abfrage zusammenbauen.
 
Du bist ein Schatz ! :) :-)
Es funzt !
Das ist die wahrscheinlich rasanteste Antwort, die ich je bekomme habe. Dafür gibt es eine sehr gute Bewertung.
 
Hmmm:
PHP:
<?php
$words = explode(" ",$searchStr);
$sql = "SELECT * FROM table WHERE ";
for($i = 0; $i < sizeof($words); $i++ ) {
    $sql .= "inhalt LIKE '%" . $words[$i] . "%' ";
    $sql .= "ueberschrift LIKE '%" . $words[$i] . "%' ";
    if ($i < sizeof($words) - 1) {
        $sql .= "AND ";
    }
}
$sql .= "LIMIT 10";
?>

Oder so :)
Ungetestet, also gebe ich da keine Garantie drauf. :)
 
Zurück