MySQL joins, counts en/of distinct oid? AAAAHHH
Ik probeer nu iets heel erg ingewikkelds en ik kom er niet uit.
Ik heb de volgende tabellen: Serie, Episode en User_episode.
Serie heeft een id en name veld
Episode heeft een id, serie_id, air_date, title, nr
User_episode heeft een id, episode_id, user_id, watched (boolean)
Deze database kan bijhouden welke series je kijkt en welke afleveringen je al hebt gekeken (watched).
Nu ben ik met een pagina bezig welke al jouw series laat zien waarvoor je nog episodes hebt te kijken. Tevens moet deze pagina aangeven hoeveel episodes (per serie) je nog hebt die nog niet zijn bekeken (watched=0).
De query die ik zelf heb bedacht werkt half... Hij laat nog niet zien hoeveel eps je nog moet en er gaat iets fout met de air_date. De MIN() date die hij daar aangeeft, hoort niet bij die episode. Zie hier mijn query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
Serie.name,
ue1.id,
e1.episode,
e1.nr,
COUNT(e1.serie_id),
MIN(DATE_FORMAT(e1.air, '%Y%m%d'))
FROM
User_episode ue1
INNER JOIN Episode e1 ON (ue1.episode_id = e1.id)
INNER JOIN Serie ON (e1.serie_id = Serie.id)
LEFT OUTER JOIN User_episode ue2 ON (ue2.episode_id = e1.id)
WHERE
ue1.user_id = 1 AND
ue1.watch = 0
GROUP BY
Serie.id
ORDER BY
Serie.name
Serie.name,
ue1.id,
e1.episode,
e1.nr,
COUNT(e1.serie_id),
MIN(DATE_FORMAT(e1.air, '%Y%m%d'))
FROM
User_episode ue1
INNER JOIN Episode e1 ON (ue1.episode_id = e1.id)
INNER JOIN Serie ON (e1.serie_id = Serie.id)
LEFT OUTER JOIN User_episode ue2 ON (ue2.episode_id = e1.id)
WHERE
ue1.user_id = 1 AND
ue1.watch = 0
GROUP BY
Serie.id
ORDER BY
Serie.name
Ik hoop dat iemand zin en tijd heeft om mij hier een beetje mee te helpen.
Alvast bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Tom
Je gebruikt een agregate functie (MIN() ) en bent dus gedwongen om GROUP BY te gebruiken. Dit betekent ook dat je alle data die in het SELECT-gedeelte opvraagt en wat niet in de agregate functie staat, dus in het GROUP BY-gedeelte moet zetten.
Dat zijn dus Serie.name, ue1.id, e1.episode en e1.nr.
Gokje: Je kunt dit niet met 1 query oplossen.
Ik had al zo'n vermoeden dat het onmogelijk was... Ik splits het wel op om per resultaat een nieuwe query te maken voor de count...
Bedankt voor de reply!