Door
Maestro Roboroads
op 20-09-2011 15:50
gewijzigd op 20-09-2011 15:51
1.495 views
Hallo allemaal,
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?
Ja, die haalt niet heel veel uit:
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());
Dat zijn 2 aparte queries :D
Probeer eens zoiets als:
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
Note: niet getest, je zult er misschien wat aan moeten sleutelen