Mein SQL-Problem hab ich zwar gelöst, aber auch festgestellt, dass mein Ansatz falsch ist.![]()
Ich bin dabei eine Abfrage zu ähnlich bewerteten Items zu schreiben, jedoch dauern meine bisherigen Abfrageversuche eine halbe Ewigkeit.
Ich habe eine Tabelle wo die Bewertungen gespeichert sind:
Nun möchte ich möglichst nicht-rechenintensiv herausfinden, was ähnlich bewertet wurde wie Item 1, wie die durchschnittliche Nähe ist und wie viele Bewertungen eine maximale Abweichung von +/- 1 gefunden wurden.Code:nutzer-id | item-id | bewertung 1 |1 |4 1 |2 |1 1 |3 |4 2 |1 |2 2 |2 |5 2 |3 |3 3 |1 |4 3 |2 |5 3 |3 |0
Für obiges Beispiel also:
2 x Item 3 mit durchschnittlicher Abweichung von 0,5
1 x Item 2 mit durchschnittlicher Abweichung von 1
Mir ist nur schleiherhaft wie ich das in eine Abfrage bekomme - kann mir jemand helfen?
Bisher hatte ich erst alle Nutzer rausgefischt, welche Item 1 bewerteten, dann über php eine schleife geschrieben welche jeden Nutzer einzeln nach ähnlichen Items abfragt. Das dauert definitiv zu lange wie ich rausfinden musste...
Mein SQL-Problem hab ich zwar gelöst, aber auch festgestellt, dass mein Ansatz falsch ist.![]()
Zusatz: richtig wäre gewesen:
select (t.bewertung - foo.bewertung) as differenz, t.item-id from (select nutzer-id, item-id from table where item-id = 1) as foo, table t where t.nutzer-id = foo.nutzer-id and t.item-id = foo.item-id;
damit sehe ich wie ähnlich jedes item zu item 1 bewertet wurde. Dies noch mit Aggregatfunktionen ausgestattet sollte dann nützlich sein.
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen