online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Uesch vom 11.07.2019, 12:28 Options

levenshtein

Hallo allerseits,

ich würd gern wissen wie man ein MySQL- Result so sortieren kann, dass es nach der Ähnlichkeit zu dem, was ich eingegeben habe sortiert wird. Also wenn ich in das Suchfeld zum Beispiel "in" eingebe, soll er mir an erster Stelle auch "in" zeigen und nicht zum Beispiel "eins".
Dachte daher, dass man das so ähnlich lösen könnte:

foreach ($words as $word) {
$lev = levenshtein($input, $word);
}
$query = "SELECT deutsch FROM words WHERE deutsch like '%".$search."%' order by ".$lev."";
$resultID = @mysql_query($query);


Aber so einfach gehts wohl nicht. Kann mir jemand helfen?


Danke

Üsch


Antwort schreiben

Antwort 1 von Uesch vom 13.07.2019, 12:45 Options

Weiß niemand wie man das machen könnte?

Antwort 2 von Proggi vom 13.07.2019, 12:51 Options

da SQL die funktion levenshtein nicht kennt wird das etwas hakelig... Du müstest entweder eine SQL-Funktion für Levenstein bekommen (vielleicht gibts das ja doch irgendwo) oder alle selektieren und dann mit der PHP-Funktion
if (levenshtein(§str1,$Str2) < 99) {

selber ausfiltern...
davon rate ich aber ab da das wohl vielleicht den SQL-Server sehr belastet und langsam ist, wenn große mengen an daten überprüft werden.

Antwort 3 von disco vom 13.07.2019, 12:53 Options

moin

du solltest dir mal überlegen welche (un)logik dahintersteht, bzw. musst du genau wissen, wie dir ordnung aussehen soll..

wenn vorne erstmal die hits stehen sollen, wo der suchbegriff den anfang des wortes bildet, dann zieh diese doch aus dem ergebnis und sortiere es alphabetisch.
danach listest du den übrig gebliebenen rest auf.

g,
disco

Antwort 4 von Uesch vom 13.07.2019, 12:55 Options

Ja, so würde es gehen. Ich möchte es halt so haben wie hier: http://www.albertmartin.de/latein/?q=haus&con=0

Ich versuch es mal so wie disco gesagt hat...

Antwort 5 von Proggi vom 13.07.2019, 14:48 Options

also mit levenstein hat das bei denne auch nichts zu tun, die suchen scheinbar auch mit like '%Begriff%'

denn Schauspiele hört sich für mich nicht ähnlich wie Haus an...

Antwort 6 von Proggi vom 13.07.2019, 14:51 Options

aso.. order by alles klar ^^ naja, ich glaube die Sortierung machen die aber wirklich dann über levenstein nur das die das in dem PHP-Script machen. Die suche filtert vorher normal mit "like" um die anzahl der Treffer einzugrenzen...

dafür gibts Array-funktionen, erstelle ein mehrdimensionales array wo du Deutscher begriff, Lateinischer begriff und Levensteinwert einträgst. Dann sortierst du das Array nach dem Levensteinwert und gibst es aus. Für den Levensteinvergleich mache die "Fett-schrifft" für den Suchbegriff am besten erst bei der Ausgabe rein.

Antwort 7 von Uesch vom 13.07.2019, 16:11 Options

Danke erstmal,

habs jetzt so:

$query = "SELECT id,deutsch,griechisch FROM ".$table
." WHERE deutsch like '%".$search."%' or griechisch like '%".$search."%' order by deutsch LIMIT ".$start.",".$limit;
$resultID = @mysql_query($query);

while ($data = mysql_fetch_array($resultID))
{
$lev = levenshtein($search, $data["deutsch"]);
$array = array($data["deutsch"], $data["griechisch"], $lev);
array_multisort ($array[$lev], SORT_ASC, SORT_NUMERIC);


Da gibt er mir aber folgende Fehlermeldung:
Argument #1 is expected to be an array or a sort flag

Das mit dem $array[$lev] geht wahrscheinlich nicht, ne?
Oder muss man den Array mit array_push machen?

Ähnliche Themen

"Ähnlichstes" Wort raussuchen
Uesch  01.07.2007 - 22 Hits - 4 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026