Kezdőoldal » Számítástechnika » Weblapkészítés » GROUP BY és ORDER BY egyszerre...

GROUP BY és ORDER BY egyszerre való alkalmazása?

Figyelt kérdés

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!



2016. nov. 28. 16:58
 1/8 anonim ***** válasza:

Íme egy példa:


[link]

2016. nov. 28. 17:03
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

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.

2016. nov. 28. 17:06
 3/8 anonim ***** válasza:

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.

2016. nov. 28. 17:22
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
Hazug mondó válaszait pedig el se olvasd, teljesen dilettáns.
2016. nov. 28. 17:23
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

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

2016. nov. 28. 23:36
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

"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

2016. nov. 29. 18:39
 7/8 anonim ***** válasza:
Ez a query nem is működhet.
2016. nov. 29. 18:44
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

"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;

2016. nov. 29. 21:53
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!