Top 3
Ik heb een script dat mensen een idee kunnen insturen, waarna andere mensen op dat idee kunnen stemmen.
De tabel ziet er als volgt uit:
id / naam / idee_id / stem
idee_id is het id van een rij in een ander tabel (zo zijn ze dus gelinkt).
Als stem 0 is, is er Nee gestemd, en als hij 1 is, is er ja gestemd.
Nu mijn vraag:
Ik wil een top 3 hebben van de ideeën die de meeste compensatiepunten heeft (het aantal ja-stemmen minus het aantal nee-stemmen) maar heb dus echt geen flauw idee hoe de Query eruit moet zien.
Ik wil de 3 idee_id's met de hoogste compenstatiepunten als output hebben.
Iemand een idee hoe de query er dan uit moet zien?
Alvast bedankt!
Gewijzigd op 20/09/2011 15:51:22 door Maestro Roboroads
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
select naam, count(*)
from tabel
where stem = 1
minus
select naam, count(*)
from tabel
where stem = 0
group by naam
from tabel
where stem = 1
minus
select naam, count(*)
from tabel
where stem = 0
group by naam
en dan nog begrenzen op 3, iets met limit 3?
Gewijzigd op 20/09/2011 16:39:35 door Aad B
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MINUS (SELECT count(*) FROM ghm_stemmen WHERE stem = '0') GROUP BY idee_id' at line 1
mysql_query("SELECT count(*) FROM ghm_stemmen WHERE stem = '1' MINUS SELECT count(*) FROM ghm_stemmen WHERE stem = '0' GROUP BY idee_id")or die(mysql_error());
EDIT: Oh, je edit nog niet gezien, ff kijken
EDIT 2:
Nope!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'minus select idee_id, count(*) from ghm_stemmen where stem = '0' group by idee_i' at line 4
mysql_query("select idee_id, count(*)
from ghm_stemmen
where stem = '1'
minus
select idee_id, count(*)
from ghm_stemmen
where stem = '0'
group by idee_id")or die(mysql_error());
Gewijzigd op 20/09/2011 16:46:35 door Maestro Roboroads
Probeer eens zoiets als:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
`idee`.`naam`,
(SELECT COUNT(*) FROM `stemmen` WHERE `stemmen`.`stem`='1' AND `stemmen`.`idee_id`=`idee`.`id`) AS `positief`,
(SELECT COUNT(*) FROM `stemmen` WHERE `stemmen`.`stem`='0' AND `stemmen`.`idee_id`=`idee`.`id`) AS `negatief`,
`positief` - `negatief` AS `totaal`
FROM `idee`
ORDER BY `idee`.`totaal` DESC
LIMIT 3
`idee`.`naam`,
(SELECT COUNT(*) FROM `stemmen` WHERE `stemmen`.`stem`='1' AND `stemmen`.`idee_id`=`idee`.`id`) AS `positief`,
(SELECT COUNT(*) FROM `stemmen` WHERE `stemmen`.`stem`='0' AND `stemmen`.`idee_id`=`idee`.`id`) AS `negatief`,
`positief` - `negatief` AS `totaal`
FROM `idee`
ORDER BY `idee`.`totaal` DESC
LIMIT 3
Note: niet getest, je zult er misschien wat aan moeten sleutelen
Gewijzigd op 20/09/2011 18:44:40 door Jacco Brandt