Top 3
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?
Alvast bedankt!
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
Grofweg:
en dan nog begrenzen op 3, iets met limit 3?
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
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());
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
Dat zijn 2 aparte queries :D
Probeer eens zoiets als:
Note: niet getest, je zult er misschien wat aan moeten sleutelen
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




