Hallo zusammen,
nach langem und stillen mitlesen, wage ich mich nun an meinen ersten Beitrag. Meine Problematik erfordert eine überdurchschnittliche Ausführung, ich bedanke mich im Voraus für jede Hilfe:
Ich speichere in der Tabelle 'history' die Chronik eines Surfers (URLs) mit Bewertungen (history_vote).
CREATE TABLE IF NOT EXISTS history
(
history\_user
int(11) unsigned NOT NULL,
history\_link
int(11) unsigned NOT NULL,
history\_vote
enum('awsome','nice','ok') COLLATE latin1_german1_ci NOT NULL,
) ENGINE=MyISAM;
Nun möchte ich - ausgehend von meinem Benutzer (nehmen wir an, ich habe die ID 1) - die 2 (oder n) Benutzer herausfinden, welche die meisten Übereinstimmungen mit den von mir als 'awsome' oder 'nice' bewerteten URLs haben.
Das Ergebnis soll eine Liste der User mit ID sowie der Anzahl von Übereinstimmungen im Verhältnis zum eigenen Benutzer enthalten.
Also z.B.
user matches
2 2
3 1
-> Dabei würden folgende Datensätze bestehen: (ID 1 = eigener User)
INSERT INTO history
(history\_user
, history\_link
, history\_vote
) VALUES
(1, 1, 'awsome'),
(1, 2, 'nice'),
(1, 3, 'awsome'),
(2, 1, 'nice'),
(2, 3, 'awsome'),
(2, 2, 'ok'),
(3, 2, 'awsome)
Nach einigem Kopfzerbrechen ist mir folgender Lösungsansatz eingefallen:
1. Ich ermittle eine begrenzte Zahl der Benutzer welche den Link (history_link) meiner eigenen Einträge (history_user = 1) 'awsome' oder 'nice' fanden.
2. Von diesen selektiere ich alle (awsome & nice) Einträge der Tabelle
3. und überprüfe ob mein Benutzer ebenfalls einen passenden Eintrag vorliegen hat - gegebenenfalls erhöhe ich manuell eine Variable für die Benutzer-Übereinstimmungen.
Das scheint mir aber bei großen Datenbeständen sehr umfangreich zu werden, daher strebe ich nach einer alternativen Idee. Kreativität erwünscht ;)
Grüße
jumini