Hi,
Im Moment gefällt mir meine eigene schlanke Lösung ganz gut (114 Codezeilen plus iclude für DB-Öffnen) mit 5 Durchläufen. Dabei stehen die vermutlich besten Treffer oben. Wenn mehr als 10 Treffer gefunden wurden, werden weitere Durchläufe gebremst (break).
und du frägst dann jedesmal die DB an mit LIKE, oder?
Ja. Habe jetzt noch den SOUNDS LIKE als weiteren Durchlauf hinzugefügt:
$q = "
SELECT
ort1.id
,ort1.land_kz
,ort1.plz
,ort1.name
,ort1.name_zusatz
,ort1.name_dialekt
,ort1.keywords
FROM orte ort1
";
if ( $i < 5 ) $q .= "
WHERE ort1.name LIKE \"".$such_ort."\"
OR ort1.name_zusatz LIKE \"".$such_ort."\"
OR ort1.name_dialekt LIKE \"".$such_ort."\"
OR ort1.keywords LIKE \"".$such_ort."\"
OR ort1.plz LIKE \"".$such_ort."\"
";
else $q .= "
WHERE ort1.name SOUNDS LIKE \"".$arr_in['such_ort']."\"
";
$q .= "
ORDER BY
CONVERT(ort1.name USING latin1) COLLATE latin1_german2_ci
,ort1.land_kz
,ort1.plz
LIMIT 0,30
";
Und selbst, wenn die Laufzeit durch das LIKE nicht optimal wäre ... die Routine wird ja nur angesprungen, wenn ein Mensch etwas eingegeben hat, nicht für jede Anzeige.
Gast