online 1
gast (50)

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

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

Fragevon Uesch vom 08.03.2021, 15:34 Options

Lösung

Datensätze nach Ähnlichkeit sortieren

Hallo allerseits,

wie kann ich Daten aus einer MySQL-Tabelle so sortieren, dass das oberste Wort am ähnlichsten zum eingegebenen Wort ist und darunter die Ähnlichkeit immer mehr abnimmt? Momentan sortiert er nach dem Alphabet, aber ich möchte eine Sortierung nach der Ähnlichkeit mit dem eingegebenen Wort. Also zum Beispiel:

Eingegebenes Wort: Haus
1. Ergebnis = Haus
2. Ergebnis = Rathaus
3. Ergebnis = durchaus

Ich habe versucht, es mit levenshtein zu realisieren:
SELECT * FROM ".$table 
." WHERE irgendwas like '%".$search."%' or irgendwas2 like '%".$search."%' order by ".levenshtein(???)." 


Muss ich zwei Abfragen machen? Die erste fragt nach der Ähnlichkeit ab und die zweite selected dann die Datensätze und sortiert sie nach dem levenshtein-Wert? Oder kann ich das ganze mit was anderem als levenshtein machen?

Vielen Dank


Antwort schreiben

Antwort 21 von Uesch vom 19.03.2021, 13:11 Options

Ok, ich habs jetzt hinbekommen. Vielen Dank.

Das wichtige war erstens, dass das
$i1++;
nicht im if-Statement stehen durfte, sondern außerhalb im foreach. Und zweitens, dass das $iAnzahl nicht dem zweiten Wert beim LIMIT entspricht, weil du ja hier
$iStart+ $iAnzahl
als Limit nimmst und das $iAnzahl somit einen festen Wert von 10 haben muss.

Also, vielen Dank nochmal!

Schönen Gruß von Üsch.

Antwort 22 von son_quatsch vom 19.03.2021, 14:08 Options

Ähm...

$i1++ stand niemals innerhalb des If-Blocks.

Und laut http://dev.mysql.com/doc/refman/5.0/en/select.html
Zitat:
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be non-negative integer constants (except when using prepared statements).

With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
Keine Ahnung, was du da verändert (oder gar falsch abgetippt statt kopiert) hast, aber es funktionierte von Anfang an so wie ichs geschrieben hab :(

Antwort 23 von Uesch vom 19.03.2021, 15:54 Options

Du hast Recht, ich habe mir hinter
if ( $i1>= $iStart&& $i1< $iStart+ $iAnzahl )
ein "{" hinzugedichtet. Dachte, da hätte eins gestanden. Tut mir Leid.

Also vielen Dank.

Ähnliche Themen

Sortieren von LinkedList
UZUZ  19.02.2008 - 59 Hits - 3 Antworten

Musik in mp3 sortieren.
Cooper3210  30.09.2008 - 2009 Hits -

Datensätze mit bestimmter Endung
Uesch  18.11.2008 - 43 Hits - 2 Antworten

Zeige Datensätze 0 - 7 (8 insgesamt)
Uesch  07.02.2009 - 133 Hits - 2 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