Gast: Danke - und eigener Ansatz

Beitrag lesen

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