SQL query, kom er niet uit

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SonataArctica
  • Registratie: Mei 2008
  • Laatst online: 25-08 10:47
Hallo allemaal,

Ik ben momenteel bezig met het maken van een applicatie in PHP en MySQL, maar ik kom er maar niet uit met 1 van mijn queries. Misschien kunnen jullie helpen. Ik denk dat het echt een stomme fout is, maar ik krijg het niet voor elkaar.

De patiënt:
SQL:
1
2
3
4
5
6
7
8
SELECT `s`.`title` , `s`.`writer` , `total`
FROM `song` AS `s`
LEFT JOIN (

SELECT COUNT( `sv`.`id` ) AS `total` , `sv`.`song_id`
FROM `song_vote` AS `sv`
WHERE `sv`.`song_id` = 's.id'
) AS `result` ON ( `s`.`id` = `result`.`song_id` )


Het probleem is dat het veld 'total' overal op 'NULL' komt te staan in de results. Wanneer ik in de WHERE statement 's.id' vervang door de id van 1 van de songs, wordt voor die song de correcte waarde ingevuld, en voor de rest weer NULL.

Jullie een idee?
Alvast bedankt ;-)

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Het woord dat je zoekt is 'Group By': Programming FAQ - SQL
Ook probeer je hier een join te doen (je songs met je auteurs), hier kun je ook informatie over vinden in de FAQ: Programming FAQ - SQL.

De backticks om je tabel/kolomnamen zijn in dit geval ook niet nodig; je kunt ze gewoon weghalen om je query duidelijker te maken.

Acties:
  • 0 Henk 'm!

  • SonataArctica
  • Registratie: Mei 2008
  • Laatst online: 25-08 10:47
YopY schreef op maandag 07 mei 2012 @ 21:25:
Het woord dat je zoekt is 'Group By': Programming FAQ - SQL
Ook probeer je hier een join te doen (je songs met je auteurs), hier kun je ook informatie over vinden in de FAQ: Programming FAQ - SQL.

De backticks om je tabel/kolomnamen zijn in dit geval ook niet nodig; je kunt ze gewoon weghalen om je query duidelijker te maken.
Klopt. De query wordt gegenereerd door Kohana, die plaatst er zelf van die backticks in. Normaal gesproken gebruik ik die zelf ook niet, maar omdat ik de query heb overgenomen en zo geprobeert heb in phpMyAdmin tot de oplossing te komen staan deze er nu wel in.

Ik weet wel hoe een group by werkt, maar ik krijg het daarmee niet werkend. Hier heb ik net ook al even lopen stoeien, maar dat gaf niet het gewenste resultaat :)

Acties:
  • 0 Henk 'm!

  • SonataArctica
  • Registratie: Mei 2008
  • Laatst online: 25-08 10:47
Heb hem gevonden:

code:
1
2
3
4
5
6
7
8
9
10
SELECT `s`.`title` , `s`.`writer` , `total`
FROM `song` AS `s`
LEFT JOIN (

SELECT COUNT( `sv`.`id` ) AS `total` , `sv`.`song_id`
FROM `song_vote` AS `sv`
GROUP BY `song_id`
HAVING `total` >=1
) AS `result` ON ( `s`.`id` = `result`.`song_id` )
LIMIT 0 , 30

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Kun je hem ook zonder subquery schrijven?

Acties:
  • 0 Henk 'm!

  • SonataArctica
  • Registratie: Mei 2008
  • Laatst online: 25-08 10:47
GlowMouse schreef op maandag 07 mei 2012 @ 22:24:
Kun je hem ook zonder subquery schrijven?
Kan inderdaad makkelijker:

code:
1
2
3
SELECT s.title, COUNT(sv.song_id), AVG(sv.vote_value) AS total FROM song AS s
JOIN song_vote AS sv ON sv.song_id = s.id
GROUP BY s.id

Acties:
  • 0 Henk 'm!

  • MrHaas
  • Registratie: Maart 2009
  • Laatst online: 23-08 10:21
Volgens mij heb je verkeerde aanhalingstekens gebruikt rond s.id in de WHERE van de subquery...
Pagina: 1