YourWBB


yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Suchfunktion » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag 2.257 Views | | Thema zu Favoriten hinzufügen

Neues Thema erstellen Antwort erstellen

Zum Ende der Seite springen Suchfunktion
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Pilleslife
Mitglied


images/avatars/avatar-5378.jpg

Dabei seit: 22.04.06
Beiträge: 446
Forenversion: 2.3; 2.1

 Suchfunktion Antworten Zitieren Editieren Melden       UP

Hallo,

irgendwie komme ich mit meiner Suchfunktion nicht weiter traurig .

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
02.09.09 18:33 Pilleslife ist offline E-Mail WWW Finden Als Freund hinzufügen Füge Pilleslife in deine Kontaktliste ein MSN Passport-Profil von Pilleslife anzeigen
Broken Sword Broken Sword ist männlich
Mitglied


images/avatars/avatar-5300.jpg

Dabei seit: 18.06.04
Beiträge: 537
Forenversion: 2.3

Antworten Zitieren Editieren Melden       UP

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Broken Sword: 02.09.09 19:27.

02.09.09 19:26 Broken Sword ist offline WWW Finden Als Freund hinzufügen
Hawkes
gesperrt 10/01/10


Dabei seit: 31.03.04
Beiträge: 213

Antworten Zitieren Editieren Melden       UP

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.
02.09.09 20:24 Hawkes ist offline Finden Als Freund hinzufügen
Pilleslife
Mitglied


images/avatars/avatar-5378.jpg

Dabei seit: 22.04.06
Beiträge: 446
Forenversion: 2.3; 2.1

Themenstarter Thema begonnen von Pilleslife
Antworten Zitieren Editieren Melden       UP

Danke für eure Tipps. Ich habe es jetzt vielleicht etwas umständlicher und Ressourcenintensiver umgesetzt aber es funktioniert smile

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.
02.09.09 20:28 Pilleslife ist offline E-Mail WWW Finden Als Freund hinzufügen Füge Pilleslife in deine Kontaktliste ein MSN Passport-Profil von Pilleslife anzeigen
Baumstruktur | Brettstruktur
Gehe zu:

Neues Thema erstellen Antwort erstellen

yourWBB » yourWBB Misc * » Das Proggen » MySQL und PHP » Suchfunktion