Selecteer X aantal rijen in Y aantal groepen
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT *
FROM gegevens
WHERE categorie='500'
AND gesloten IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR)<datum
AND id!='18' AND id!='46' AND id!='109' AND id!='227'
AND id_gebruiker!='197'
ORDER BY vertoningen DESC
LIMIT 5
FROM gegevens
WHERE categorie='500'
AND gesloten IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR)<datum
AND id!='18' AND id!='46' AND id!='109' AND id!='227'
AND id_gebruiker!='197'
ORDER BY vertoningen DESC
LIMIT 5
Gewijzigd op 17/04/2021 19:02:57 door Elise S
UNION.
Of gebruik ROW_NUMBER() als window-functie, bijvoorbeeld:
Ik heb deze query niet uitgeprobeerd, maar als het goed is vreet MySQL het HAVING statement. Zo niet kan je een truukje uithalen:
Maak gebruik van Of gebruik ROW_NUMBER() als window-functie, bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
`gegevens`.*,
ROW_NUMBER() OVER (
PARTITION BY `gegevens`.`categorie`
ORDER BY `gegevens`.`vertoningen` DESC
) AS `rn`
FROM `gegevens`
WHERE `gegevens`.`categorie` IN (100, 200, 300, 400, 500, 600, 700, 800)
AND `gegevens`.`gesloten` IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR) < `gegevens`.`datum`
AND `gegevens`.`id` NOT IN (18, 46, 109, 227)
AND `gegevens`.`id_gebruiker` != 197
ORDER BY
`gegevens`.`categorie`,
`gegevens`.`vertoningen` DESC
HAVING `rn` < 6
`gegevens`.*,
ROW_NUMBER() OVER (
PARTITION BY `gegevens`.`categorie`
ORDER BY `gegevens`.`vertoningen` DESC
) AS `rn`
FROM `gegevens`
WHERE `gegevens`.`categorie` IN (100, 200, 300, 400, 500, 600, 700, 800)
AND `gegevens`.`gesloten` IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR) < `gegevens`.`datum`
AND `gegevens`.`id` NOT IN (18, 46, 109, 227)
AND `gegevens`.`id_gebruiker` != 197
ORDER BY
`gegevens`.`categorie`,
`gegevens`.`vertoningen` DESC
HAVING `rn` < 6
Ik heb deze query niet uitgeprobeerd, maar als het goed is vreet MySQL het HAVING statement. Zo niet kan je een truukje uithalen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH `t` AS (
SELECT
`gegevens`.*,
ROW_NUMBER() OVER (
PARTITION BY `gegevens`.`categorie`
ORDER BY `gegevens`.`vertoningen` DESC
) AS `rn`
FROM `gegevens`
WHERE `gegevens`.`categorie` IN (100, 200, 300, 400, 500, 600, 700, 800)
AND `gegevens`.`gesloten` IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR) < `gegevens`.`datum`
AND `gegevens`.`id` NOT IN (18, 46, 109, 227)
AND `gegevens`.`id_gebruiker` != 197
)
SELECT `t`.*
FROM `t`
WHERE `t`.`rn` < 6
ORDER BY
`gegevens`.`categorie`,
`gegevens`.`vertoningen` DESC
SELECT
`gegevens`.*,
ROW_NUMBER() OVER (
PARTITION BY `gegevens`.`categorie`
ORDER BY `gegevens`.`vertoningen` DESC
) AS `rn`
FROM `gegevens`
WHERE `gegevens`.`categorie` IN (100, 200, 300, 400, 500, 600, 700, 800)
AND `gegevens`.`gesloten` IS NULL
AND DATE_SUB(NOW(), INTERVAL 24 HOUR) < `gegevens`.`datum`
AND `gegevens`.`id` NOT IN (18, 46, 109, 227)
AND `gegevens`.`id_gebruiker` != 197
)
SELECT `t`.*
FROM `t`
WHERE `t`.`rn` < 6
ORDER BY
`gegevens`.`categorie`,
`gegevens`.`vertoningen` DESC