Selecteer X aantal rijen in Y aantal groepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Elise S

Elise S

17/04/2021 16:16:44
Quote Anchor link
Onderstaande code voer ik nu 8x uit op 1 pagina omdat ik max 5 rijen gegevens uit meerdere categorieën (8) nodig heb. Categorieën bestaan uit getallen in stappen van 100. Ik weet dat er een slimmere manier is om dit in 1 query te doen maar mijn kennis van MySQL is beperkt. Ik kan een SELECT-query doen maar dan heb je het ook gehad. Weet iemand een oplossing? Thx.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 17/04/2021 19:02:57 door Elise S
 
PHP hulp

PHP hulp

15/11/2024 02:36:34
 

18/04/2021 11:23:49
Quote Anchor link
Maak gebruik van UNION.
Of gebruik ROW_NUMBER() als window-functie, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 18/04/2021 11:45:24 door
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.