MySql Order By, nem ismétlődő mező

MySql Order By, nem ismétlődő mező
2020-01-21T15:08:53+01:00
2020-01-22T10:28:09+01:00
2022-10-15T21:16:18+02:00
Incomingson
Üdv,

Van én nekem egy lekérdezésem.

SELECT * FROM puffer_dates ORDER BY find_in_set(day, "1,2,3,4,5,6,7"), datetime ASC;

Ezt a lekérdezést szeretném úgy átalakítani, hogy ez a sorrend alakuljon ki:

Keresd meg a legelső day = 1,
Keresd meg a legelső day = 2,
Keresd meg a legelső day = 3,

Tehát 15 rekord esetén így kéne, hogy kinézzen a day mező alapján a sorrend, ha 1-7 ig van:

1,2,3,4,5,6,7,1,2,3,4,5,6,7,1



Tehát a day lehet 1-7 ig, viszont van amikor csak kevesebbig megy.


Azon agyaltam épp, hogy itt csoportokra kellene bontani a day mező alapján. 

Nem látom át, hogy elementként hogy tudnám ezt itt most megtenni.

Előre is köszönöm.
Mutasd a teljes hozzászólást!
Hali!

Ami neked kell:
1. `day` alapján rendezni (másodlagos rendezés a `datetime`), így egy „csoportban” lesznek az azonos `day` értékű sorok, azon belül pedig időben növekvő rendezettséggel.
2. Ezekhez a csoportokhoz sorszámot rendelni úgy, hogy a csoportokon belül folyamatosan növekvő legyen, de csoportváltásnál újrainduljon.
3. A keletkezett eredményhalmazt venni alapul egy újabb lekérdezéshez, ahol az elsődleges rendezés a hozzárendelt sorszám alapján történjen, a másodlagos pedig a `day` alapján.

Vizsgáld meg a következő SQL-mondatot (különös tekintettel arra, miként történik az automatikus sorszámozás, a csoportváltással):
SELECT * FROM ( SELECT *, @rowNum := IF(@day = `day`, @rowNum + 1, IF(@day := `day`, 1, 1)) AS `row_num` FROM `puffer_dates` JOIN (SELECT @rowNum := 0, @day := 0) AS `variables` ORDER BY `day` ASC, `datetime` ASC ) AS `t` ORDER BY `row_num` ASC, `day` ASC
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd