Rolf B: Suchmaschine in DB

Beitrag lesen

Hallo Martin,

PHP-Neuling

vs

Professionelle Such-Engines

passt nicht zusammen. Googles MapReduce baut man nicht eben in einem SQL Statement nach. Man könnte natürlich etwas konstruieren, das die Treffer pro Row zählt und das Ergebnis nach der Anzahl sortieren. Das ist ein guter Vorschlag.

SELECT id, name, strasse, popo
       , IF (name like ..., 1, 0) 
         + IF (strasse like ..., 1, 0) 
         + IF (popo like ..., 1, 0) as HitCount
FROM Tabelle
ORDER BY 5 DESC

Das wird schön aus Bausteinen zusammengesetzt. Die IFs nehmen wir in die erste Spalte, damit keine magische Zahl hinter dem ORDER BY nötig ist (ein ORDER BY HitCount ist kein Standard-SQL, würde in MySQL aber gehen soweit ich weiß).

$ifListe = ARRAY();

if (isset($_POST['STRASSE'])) {
   $ifListe[] = "IF (STRASSE LIKE '" 
              . mysqli_real_escape_string($db, $_POST['STRASSE'])
              . "%', 1, 0)";
}
if (isset($_POST['NAME'])) {
   $ifListe[] = "IF (NAME LIKE '" 
              . mysqli_real_escape_string($db, $_POST['NAME'])
              . "%', 1, 0)";
}
$ifs = implode("+ ", $ifListe);

$sql = <<<END
   SELECT $ifs as HitCount, ID, name, strasse, popo
   FROM Tabelle
   ORDER BY 1 desc
END;

So. Die Gewichte in den IFs kann man auch anders als 1 und 0 wählen, wenn z.B. ein Treffer in der Straße höher zählen soll als ein Treffer am Popo.

Das SQL ist ungetestet, da sollte man genau auf Fehlermeldungen achten. Möglicherweise fehlen da ein paar Klammern oder so.

Rolf

--
sumpsi - posui - obstruxi