Ik ben al enige tijd bezig met het maken van een query maar het lukt niet helemaal
Wat wil ik terug zien van mijn tabel:
Ik wil de laatste 100 ingevulde datumvelden verzamelen (voteDate) en optellen hoevaal er waarop is gestemd (GOOD, OK OR BAD).
Ik dacht zelf in de richting van:
SELECT
COUNT(case when `rating` = 'GOOD' then 1 else null end) AS 'GOOD',
COUNT(case when `rating` = 'OK' then 1 else null end) AS 'OK',
COUNT(case when `rating` = 'BAD' then 1 else null end) AS 'BAD',
COUNT(case when `rating` IS NOT NULL then 1 else null end) AS 'TOTAL'
FROM `feedback` WHERE `voteDate` IS NOT NULL
LIMIT 100
Dit geeft natuurlijk maar 1 rij terug waardoor die limit 100 niet zal werken.
Dus van de laatste 100 reacties (via voteDate) wil ik optellen hoeveel reacties van welk soort er terug zijn gekomen.
SELECT
COUNT(rating) AS amount, rating
FROM
feedback
WHERE
voteDate IS NOT NULL
GROUP BY
rating
ORDER BY
voteDate DESC
LIMIT
100
[size=xsmall]Toevoeging op 25/08/2014 15:11:38:[/size]
COUNT() is een arregate functie. In combinatie met de GROUP BY rating zorg je dat de ratings gegroepeerd worden en iedere voorkomende rating een rij oplevert.
[size=xsmall]Toevoeging op 25/08/2014 15:14:49:[/size]
nee ik realiseer me zojuist dat een subquery noodzakelijk is die eerst de 100 nieuwste votes pakt.
<?php
SELECT `rating`
COUNT(*) AS `TOTAL`,
COUNT(case when `rating` = 'GOOD' then 1 else null end) AS `GOOD`,
COUNT(case when `rating` = 'OK' then 1 else null end) AS `OK`,
COUNT(case when `rating` = 'BAD' then 1 else null end) AS `BAD`
GROUP BY `rating`
?>
Probeer dit eens even, geen idee of dit werkt maar volgens mij moet het hier ergens op lijken.
Toevoeging: The COUNT(column_name) function returns the number of values (NULL values will not be counted) of the specified column
SELECT
COUNT(r.rating) AS amount, r.rating
FROM
(SELECT
voteDate,rating
FROM
feedback
WHERE
voteDate IS NOT NULL
ORDER BY
voteDate DESC
LIMIT 100) AS r
GROUP BY
r.rating
<?php
SELECT `rating`
COUNT(*) AS `TOTAL`,
COUNT(case when `rating` = 'GOOD' then 1 else null end) AS `GOOD`,
COUNT(case when `rating` = 'OK' then 1 else null end) AS `OK`,
COUNT(case when `rating` = 'BAD' then 1 else null end) AS `BAD`
FROM (SELECT `rating` FROM `tabel` LIMIT 100)
GROUP BY `rating`
?>
SELECT
COUNT(r.rating) AS amount, r.rating
FROM
(SELECT
voteDate,rating
FROM
feedback
WHERE
voteDate IS NOT NULL
ORDER BY
voteDate DESC
LIMIT 100) AS r
GROUP BY
r.rating
snelheid win je door indexen te plaatsen op de juiste kolommen, voteDate bijvoorbeeld omdat je daar op sorteert. Ben zelf geen expert dus misschien hebben andere nog tips