Pilleslife
Hallo,
irgendwie komme ich mit meiner Suchfunktion nicht weiter

.
Ich habe eine MySQL-Datenbank mit folgenden 3 Tabellen.
- users (id,nick,mail,pw,uws.)
- profilfelder(id, name, typ)
- profilfeldwerte (id, wert, owner)
Ich denke der Zusammenhang der Tabellen sollte klar sein. Jetzt möchte ich eine Usersuche realisieren. Wie mache ich das am Besten?
Danke für eure Hilfe.
Gruß
Pilleslife
Broken Sword
Am besten (Beispiel) `wert`aus `profilfeldwerte` bei der Erstellung mit FULLTEXT() versehen, dann kannst mittels MATCH AGINST suchen.
MySQL
code: |
1:
2:
3:
|
SELECT * FROM `profilfeldwerte`
WHERE (MATCH (`wert`) AGAINST ('+Peter' IN BOOLEAN MODE)) |
|
Bedeutung von den einzelnen Suchmustern lauten:
+word (entspricht AND)
-word (enspricht NAND)
~word (wertet das Wort schlechter [günstig bei "und" oder "oder", die nicht wirklich zur Suche beitragen])
<word (ordnet dem Wort einen geringen Stellenwert zu)
>word (Gegenteil von <word)
word* (Das wildcard-Zeichen)
"word word" (genaue Suche)
+(word wörd) (Klammern halt, Beispiel sucht nach word oder wörd)
Mehr zum Thema:
http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html
Damit kannst du auch mehrere Tabellen auf einmal durchsuchen, bzw. mehrere Spalten unterschiedlicher Tabellen.
Gruß
Broken Sword
Hawkes
Dazu sein angemerkt, dass dies nur mit MyISAM Tabellen funktioniert. Außerdem liefert die FULLTEXT Suche nicht so tolle Ergebnisse. WoltLab probiert das beim WCF 1.1 durch eine eigene Relevanzgewichtung zu verbessern, aber ein eigener Suchindex ist immer noch das Beste wenn man gute Ergebnisse will.
Je nach Profilfeldtyp ist eine FULLTEXT Suche imho etwas überdimensioniert.
Mal eine andere Frage: Wie willst du bei dieser Datenstruktur deine Userdaten darstellen? Wenn ichs richtig überschlage, benötigst du ohne Caching pro Benutzerobjekt 2 Queries, sowie ein Query zum Laden aller möglichen Profilfelder.
Pilleslife
Danke für eure Tipps. Ich habe es jetzt vielleicht etwas umständlicher und Ressourcenintensiver umgesetzt aber es funktioniert
Ich erzeuge ein user array, darin schreibe ich die ganzen Werte aus der User-Tabelle. Danach ergänze ich das ganze Array durch die Profilfelder. Zum Schluss durchsuche ich das ganze Array nach den Werten.