GROUP BY és ORDER BY egyszerre való alkalmazása?
Sziasztok. Lassan 5 éve nem nyúltam SQL lekérdezésekhez :) Lenne egy kérdésem.
SELECT * FROM `chat` WHERE kinek = '64' GROUP BY ki ORDER BY mikor DESC
Ez által használt lekérdezést, hogy kellene alkalmazni, hogy működjön a valóságban? Csoportosítani szeretném a üzeneteket Küldő szerint és rendezni is, hogy a legfrissebb legyen a végeredmény. Mert ki szeretném íratni az üzenet előzményét.
Előre is köszönöm a NAGY helpet!
SELECT * FROM `chat` WHERE kinek = '$_SESSION[id]' GROUP by ki ORDER BY mikor DESC
AZ én kodom is olyan, csak én nem számoltatás alapján akarom sorba rakni hanem üzenet érkezése alapján.
Group by nem működik csillaggal.
Szerintem te nem groupolni akarsz, hanem két mező szerint rendezni, először ki, aztán mikor szerint.
select ki, max(mikor) ...
használhatsz aggregáló függvényeket (max, avg, satöbbi.), és mivel a 'ki' alapján group by-olsz, így a hozzá tartozó 'mikor' értékek közül kiválaszthatod a legmagasabb értékűt
"SELECT mikor, ki, kinek, text, MAX(mikor) as 'rendezz' FROM `chat` WHERE kinek = '$_SESSION[id]' GROUP by ki ORDER BY rendezz DESC"
Ez alapján megírtam, de a vissza érkező adatok TEXTnél igy is az első üzenet jelenik meg :) DE a rendezésnél pedig a legmagasabb dátum érkezik vissza. :( Én rontok el valamit? :D
"SELECT ki, MAX(mikor) as 'rendezz' FROM `chat` WHERE kinek = '$_SESSION[id]' GROUP by ki ORDER BY rendezz DESC"
GROUP BY esetén az értékeket valamelyik oszlop szerint csoportosítod és a hozzájuk tartozó adatok egy halmazba kerülnek:
Pl.:
(ki, mikor, kinek)
Sanyi, 5 óra, Julis
Sanyi, 7 óra, Margit
Sanyi, 10 óra, Irén
Sanyi, 5 óra, Margit
Péter, 4 óra, Julis
Péter, 4 óra, Irén
Tegyük föl ez a táblád és GROUP BY-olsz "ki" alapján, ekkor az eredményt így képzeld el:
1. eredmény:
ki: Sanyi
mikor: 5, 7, 10, 5 óra
kinek: Julis, Margit, Irén, Margit
2. eredmény:
ki: Péter
mikor: 4, 4 óra
kinek: Julis, Irén
Tehát azok az értékek, amik kimaradtak a GROUP BY részből, egy halmazba kerültek, ekkor a
"SELECT ki, mikor, kinek FROM ... GROUP BY ki;"
lekérdezés SELECT szekciója 'mikor' és 'kinek' paramétere értelmezhetetlen, mert nem tudja, melyik értéknek kéne ott megjelennie,
VISZONT
"SELECT ki, MAX(mikor) FROM ... GROUP BY ki;"
értelmes, mivel a mikor értékek közül a max jelenik meg, ekkor ugye a visszakapott rekordjaid:
Sanyi, 10 óra
Péter, 4 óra
Ennek fényében ha aggregáló függvény nélküli(MAX, MIN, AVG, stb) paramétert szeretnél megjelenítettni a SELECT szekcióban, az csak úgy lehetséges, ha csoportosítol az alapján is, pl.: SELECT ki,kinek,MAX(mikor) FROM ... GROUP BY ki, kinek;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!