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