Voor een studytrip heb ik bij thuiskomst een site gemaakt waar alle deelnemers hun foto's op kunnen gooien zodat iedereen ervan kan genieten. Om het wat leuker te maken kunnen er comments geplaatst worden, mensen getagd en ook ratings aan foto's worden gegeven. Als je echter met 20 man op een studytrip gaat komen er veel dubbele foto's online te staan. Dit moet worden gefilterd uiteraard. Nu heb ik al een systeem waarmee dubbelen kunnen worden aangemaakt alleen de filtering lukt mij niet helemaal.
Even de selectiestatement zoals die nu is (zou moeten worden)
Met de laatste id IN .... loop ik helaas vast. Het idee erachter is dat ik de foto wil hebben van de dubbelen die de hoogste rating heeft (= eigenschap van photo). Nu zegt ie dat hij rating niet kent, mocht ik die weghalen selecteerd de database alleen maar de foto's die gelijk zijn aan het maximum van alle foto's. Uiteraard wil ik van elke dubbele (per set dus) de foto hebben met de hoogste rating (kan ook 0 zijn als ze er nog geen hebben). Ik denk dat ik er maar een klein stapje van verwijderd ben maar ook via de MySQL site + google en mn boek kom ik er niet uit welke stap ik mis.
Even de selectiestatement zoals die nu is (zou moeten worden)
SQL:
1
2
3
4
5
6
7
8
9
10
| /* selecteren van alle eigenschappen van de foto's zodat ze weergegeven kunnen worden */ SELECT * FROM photo WHERE /*wanneer een foto niet in de dubbelen voorkomt -> werkt */ id NOT IN (SELECT id_photo FROM double_photo) OR /*wanneer een foto wel in de dubbele voorkomt -> hier zit het probleem */ id IN (SELECT id_photo FROM double_photo, photo WHERE id_photo = photo.id GROUP BY id_doubles HAVING rating = MAX(rating)) ORDER BY date_time ASC Limit 0,100 |
Met de laatste id IN .... loop ik helaas vast. Het idee erachter is dat ik de foto wil hebben van de dubbelen die de hoogste rating heeft (= eigenschap van photo). Nu zegt ie dat hij rating niet kent, mocht ik die weghalen selecteerd de database alleen maar de foto's die gelijk zijn aan het maximum van alle foto's. Uiteraard wil ik van elke dubbele (per set dus) de foto hebben met de hoogste rating (kan ook 0 zijn als ze er nog geen hebben). Ik denk dat ik er maar een klein stapje van verwijderd ben maar ook via de MySQL site + google en mn boek kom ik er niet uit welke stap ik mis.
edit:
Wat me wel lukt maar niet help is het volgende:
[code=sql]
SELECT id_photo, MAX(rating) FROM double_photo, photo WHERE id_photo = photo.id GROUP BY id_doubles
[/code]
Hiermee selecteer ik de id_photo's die ik wil hebben, helaas kan ik er niets mee omdat de IN statement uiteraard maar een single column wil hebben
Wat me wel lukt maar niet help is het volgende:
[code=sql]
SELECT id_photo, MAX(rating) FROM double_photo, photo WHERE id_photo = photo.id GROUP BY id_doubles
[/code]
Hiermee selecteer ik de id_photo's die ik wil hebben, helaas kan ik er niets mee omdat de IN statement uiteraard maar een single column wil hebben
[Voor 9% gewijzigd door Rainmaker1987 op 13-06-2011 17:54]