Snooty
Commodore
- Registriert
- Dez. 2012
- Beiträge
- 4.631
Hio,
ich habe ein MySQL-Tabelle mit drei Spalten: name, plz, ort. Über ein Eingabefeld wird eine Volltextsuche durchgeführt. Da der Ort am wichtigsten ist, wird er bei der Ausgabe entsprechend höher gewertet. Das klappt soweit alles.
Wenn ich jetzt aber einen Namen und einen Ort eingebe, werden zwar Zeilen mit passendem Ort und Namen an erster Stelle ausgegeben, aber auch Zeilen, in denen nur Ort oder nur der Name vorkommen. Wie bekomme ich es hin, dass alle Eingaben vorkommen müssen?
Meine aktuelle Abfrage sieht so aus (Quelle):
Tabelle:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]1[/td]
[td]mustermann[/td]
[td]12345[/td]
[td]münchen[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[tr]
[td]3[/td]
[td]hermann[/td]
[td]53472[/td]
[td]köln[/td]
[/tr]
[tr]
[td]4[/td]
[td]hermann[/td]
[td]23154[/td]
[td]berlin[/td]
[/tr]
[/table]
Suchbegriff: köln muster
Ausgabe:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[tr]
[td]3[/td]
[td]hermann[/td]
[td]53472[/td]
[td]köln[/td]
[/tr]
[tr]
[td]1[/td]
[td]mustermann[/td]
[td]12345[/td]
[td]münchen[/td]
[/tr]
[/table]
Ich hätte aber gerne nur Folgendes als Ausgabe, da nur hier der komplette Suchbegriff köln muster existiert:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[/table]
Ich hab schon versucht, jedem String des Suchbegriffs ein '+' voranzustellen und ein '*' anzuhängen, so dass aus der Eingabe köln muster letztendlich +köln* +muster* wird. Aber damit bekomme ich gar kein Ergebnis mehr; vermutlich weil die Begriffe ja nicht in jedem Feld existieren.
ich habe ein MySQL-Tabelle mit drei Spalten: name, plz, ort. Über ein Eingabefeld wird eine Volltextsuche durchgeführt. Da der Ort am wichtigsten ist, wird er bei der Ausgabe entsprechend höher gewertet. Das klappt soweit alles.
Wenn ich jetzt aber einen Namen und einen Ort eingebe, werden zwar Zeilen mit passendem Ort und Namen an erster Stelle ausgegeben, aber auch Zeilen, in denen nur Ort oder nur der Name vorkommen. Wie bekomme ich es hin, dass alle Eingaben vorkommen müssen?
Meine aktuelle Abfrage sieht so aus (Quelle):
PHP:
"SELECT *,
(
(1.3 * (MATCH (ort) AGAINST ('$eingabe*' IN BOOLEAN MODE))) +
(0.6 * (MATCH (name, plz) AGAINST ('$eingabe*' IN BOOLEAN MODE)))
) AS relevance FROM Service
WHERE
(MATCH (name,ort,plz) AGAINST ('$eingabe*' IN BOOLEAN MODE))
HAVING relevance > 0
ORDER BY relevance";
Tabelle:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]1[/td]
[td]mustermann[/td]
[td]12345[/td]
[td]münchen[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[tr]
[td]3[/td]
[td]hermann[/td]
[td]53472[/td]
[td]köln[/td]
[/tr]
[tr]
[td]4[/td]
[td]hermann[/td]
[td]23154[/td]
[td]berlin[/td]
[/tr]
[/table]
Suchbegriff: köln muster
Ausgabe:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[tr]
[td]3[/td]
[td]hermann[/td]
[td]53472[/td]
[td]köln[/td]
[/tr]
[tr]
[td]1[/td]
[td]mustermann[/td]
[td]12345[/td]
[td]münchen[/td]
[/tr]
[/table]
Ich hätte aber gerne nur Folgendes als Ausgabe, da nur hier der komplette Suchbegriff köln muster existiert:
[table="width: 500, class: grid"]
[tr]
[td]id[/td]
[td]name[/td]
[td]plz[/td]
[td]ort[/td]
[/tr]
[tr]
[td]2[/td]
[td]musterfrau[/td]
[td]67890[/td]
[td]köln[/td]
[/tr]
[/table]
Ich hab schon versucht, jedem String des Suchbegriffs ein '+' voranzustellen und ein '*' anzuhängen, so dass aus der Eingabe köln muster letztendlich +köln* +muster* wird. Aber damit bekomme ich gar kein Ergebnis mehr; vermutlich weil die Begriffe ja nicht in jedem Feld existieren.
PHP:
"SELECT *,
(
(1.3 * (MATCH(ort) AGAINST ('+köln* +muster*' IN BOOLEAN MODE))) +
(0.6 * (MATCH(name, plz) AGAINST ('+köln* +muster*' IN BOOLEAN MODE)))
) AS relevance FROM Service
WHERE
(MATCH(name,ort,plz) AGAINST ('+köln* +muster*' IN BOOLEAN MODE))
HAVING relevance > 0
ORDER BY relevance";
Zuletzt bearbeitet: