PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Tags (Schlagworte) in MySQL speichern und mit PHP vergleichen (http://www.selfphp.de/forum/showthread.php?t=16991)

Desperado_11 10.06.2007 23:57:16

Tags (Schlagworte) in MySQL speichern und mit PHP vergleichen
 
Hi,

hab mal wieder ein ziemlich verzwicktes Problem.

Ich möchte Tags (in diesem Fall Hobbies) zu verschiedenen Personen in einer MySQL
Datenbank speichern, also nach folgenden Schema:

ID Name Tags
1 Max Mustermann Fußball, Basketball
2 Dagobert Duck Tennis, Fußball
3 Bill Gates Surfen, Federball, Angeln
4 James Bond Fußball, Basketball
...

Die Tags zu jeder Person sind jeweils in einer Zelle gespeichert,
jedoch per Komma getrennt. Nun wähle ich eine Person daraus aus,
z.B. Person 1 - Max Mustermann und möchte die Tags von ihm mit
den Tags der anderen Personen vergleichen. Und je mehr Übereinstimmungen
der Tags zwischen Max Mustermann und einer Person, desto höher soll diese
später im Ranking erscheinen. Also in diesem Fall:

Ranking Name
1 James Bond (hat genau die gleichen Tags wie Max Mustermann)
2 Dagobert Duck (hat einen gleichen Tag wie Max Mustermann)
3 Bill Gates (hat keinen gleichen Tag wie Max Mustermann)

Versteht ihr was ich meine? Ist etwas schwer zu beschreiben....

Ist das mit PHP möglich? Die Tags kann ich ja durch das Komma in Substrings umwandeln,
aber wie ist das mit dem vergleichen? Und dem Ranking? Geht das?

Gruß

MatMel 11.06.2007 00:16:34

AW: Tags (Schlagworte) in MySQL speichern und mit PHP vergleichen
 
Also gut.
Du hast es hier ja mathematisch gesehen damit zu tun zu ermitteln, wie viele Elemente die Schnittmenge von zwei Personen hat.
Ich hab keine Ahnung wie man einen Algorithmus zur Schnittmengenbestimmung aufstellen müsste, aber da kannst du dir mit Arrays und der Funktion array_intersect() behelfen.

Also speicherst du die Hobbies der einzelnen Personen in Arrays, bestimmst die Schnittmenge mit der zu vergleichenden Person und zählst dann die Elemente des Rückgabewerts.

meikel (†) 11.06.2007 02:59:01

AW: Tags (Schlagworte) in MySQL speichern und mit PHP vergleichen
 
Zitat:

Zitat von Desperado_11 (Beitrag 102501)
Ich möchte Tags (in diesem Fall Hobbies) zu verschiedenen Personen in einer MySQL Datenbank speichern, also nach folgenden Schema:

Warum verwendest Du für die "Hobby-Spalte" nicht den Typ SET? Da kannste in einer Spalte 64 Bits setzen. Jedem einzelnen Bit kannst Du beim CREATE TABLE einen eigenen Namen zuweisen. Die meist passende Suchfunktion heißt
Code:

SELECT <spaltenliste> FROM tabelle WHERE
FIND_IN_SET('Fußball', bitspalte) > 0 OR
FIND_IN_SET('Basketball', bitspalte) > 0 OR
FIND_IN_SET('Tennis', bitspalte) > 0

Code:

SELECT bitspalte FROM tabelle WHERE name="mustermann"
Ergebnis:
PHP-Code:

echo $row['bitspalte']; 

Code:

Fußball,Basketball
Ich verwende diesen Datentyp zB. für die Userrechte.


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:29:20 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.