Query nodig
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.
Kunnen jullie wat suggestisch gooien?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
COUNT(rating) AS amount, rating
FROM
feedback
WHERE
voteDate IS NOT NULL
GROUP BY
rating
ORDER BY
voteDate DESC
LIMIT
100
COUNT(rating) AS amount, rating
FROM
feedback
WHERE
voteDate IS NOT NULL
GROUP BY
rating
ORDER BY
voteDate DESC
LIMIT
100
Toevoeging op 25/08/2014 15:11:38:
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.
Toevoeging op 25/08/2014 15:14:49:
nee ik realiseer me zojuist dat een subquery noodzakelijk is die eerst de 100 nieuwste votes pakt.
zal straks nog even verder kijken
Gewijzigd op 25/08/2014 15:07:36 door Frank Nietbelangrijk
Frank Nietbelangrijk op 25/08/2014 15:03:33:
nee ik realiseer me zojuist dat een subquery noodzakelijk is die eerst de 100 nieuwste votes pakt.
zal straks nog even verder kijken
nee ik realiseer me zojuist dat een subquery noodzakelijk is die eerst de 100 nieuwste votes pakt.
zal straks nog even verder kijken
Ik heb inderdaad ook nagedacht maar mijn kennis gaat hier heel veel verder dan hier boven. Dus kwam daar hier helemaal uit
Gewijzigd op 25/08/2014 16:08:27 door flar jaja
Code (php)
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
De where clause is dus niet eens nodig.
Gewijzigd op 25/08/2014 16:26:08 door Victor G
Dit doet het inderdaad. Maar ik wil dus dit terug krijgen van alleen de laatste 100 ratings (ik heb er 7000)...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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
getest en wel
Gewijzigd op 25/08/2014 16:54:11 door Frank Nietbelangrijk
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Gewijzigd op 25/08/2014 16:53:07 door Victor G
Frank Nietbelangrijk op 25/08/2014 16:38:31:
YES! dankje! +100 voor Mr. NietBelangrijk!
haha oke super
Gewijzigd op 25/08/2014 17:00:57 door Frank Nietbelangrijk
Wat voor manier adviseer je om dit sneller te doen? ik ben daar wel benieuwt naar!
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
Je zou bijvoorbeeld wel alleen vanaf een bepaalde datum kunnen selecteren, dan heb je de subquery niet meer nodig.
Ik begrijp overigens niet waarom dit nodig is:
@Ger:
Dit omdat voteDate niet altijd ingevuld is.
Toevoeging op 26/08/2014 08:59:50:
Ralph van Delft op 26/08/2014 08:29:12:
dank jullie voor de reacties! ik ga kijken wat ik kan vinden!
@Ger:
Dit omdat voteDate niet altijd ingevuld is.
hah je hebt gelijk!
@Ger:
hah je hebt gelijk!
---