PHP SQL ORDER VS GROUP
Ik loop tegen een probleem aan en weet niet hoe ik dit moet oplossen.
select * from beoordeling WHERE groep = '16' GROUP BY id_talent ORDER BY datum
Hij laat nu 1 beoordeling zien van elk talent, dat is opzicht goed. Alleen de ORDER BY doet hij nu naar de GROUP waardoor ik niet de laaste datum krijg. DESC er achter zetten helpt ook niet.
Ik weet dus niet hoe ik er voor kan zorgen dat hij de laaste datum pakt van de beoordeling
Wat voor type is je datum veld?
type is: date
Zou volgens mij moeten werken.
Anders kijk ik even. Heb je een structuurdumpje dan?
Toevoeging op 01/02/2023 10:58:04:
Lol, de data zijn toch aflopend?
Ik moet de laatste datum hebben dus 2023-02-01 en wat ik ook doe krijg ik altijd 2023-01-31
Of je past de datum toe in WHERE als je enkel die records wilt hebben.
Gewijzigd op 01/02/2023 11:10:16 door - Ariën -
https://www.phphulp.nl/php/tutorial/databases/group-by/846/group-by-hoe-werkt-het/2376/
Toevoeging op 01/02/2023 11:19:52:
Als ik SELECT * FROM beoordeling WHERE groep = '16' GROUP BY id_talent ORDER BY datum DESC uitvoer komt 1 regel naar voor met de datum 2023-01-31
Er blijft maar een verkeerde datum uitkomen.
@Ivo P, die GROUP BY is nodig om te zorgen dat er geen dubbele uitkomsten uit komen van het zelfde talent.
Code (php)
1
2
3
4
2
3
4
SELECT talent_id, MAX(datum) AS laatstedatum
FROM beoordeling
WHERE groep = 16
GROUP BY talent_id
FROM beoordeling
WHERE groep = 16
GROUP BY talent_id
En als je nog meer velden dan talent_id wilt zien, moet je die zowel achter SELECT als achter GROUPBY plaatsen
Net in je visuele voorbeeld ging het goed met dezelfde query. Hij sorteerde aflopend.
Hij pakt in die foute query een "groupering" op talent_id. Daarbij pakt hij een willekeurige rij. Die ene rij wordt gesorteerd (wat netto geen effect heeft).
Toevallig is dat nu niet het resultaat dat Jolly zoekt.
Was dat wel het geval geweest, dan was de query goed bevonden, en zit je over 3 maanden je af te vragen waarom er soms een verkeerde datum genoemd wordt.
Je moet eigenlijk zorgen dat Mysql alleen goede query's uitvoert:
Owke... ja zoals je het gezegd zo gebeurd het ook.
Hoe zou de code er dan moeten uit zien?
Waar plaats ik die SET?
In elk geval in die sessie zou dat bewaard moeten blijven en mag je een incomplete group-by query's uitvoeren.
Kun je wat met de query in de post van 11:40 ?
Ik ben jullie dankbaar voor de hulp.
Toevoeging op 01/02/2023 12:16:21:
We zijn er toch nog niet helemaal haha.
Ik heb ook nog een cel performance en potentie.
Deze zijn gevuld bij de datum 01-02-2023 met het nummer 2 en 2
en bij de datum 31-01-2023 met het nummer 1 en 1
Deze nummers kunnen natuurlijk veranderen maar dit is zoals er er nu in staan.
Ook te zien in de afbeelding hier boven.
Ik voer nu uit;
SELECT id_talent, MAX(datum) AS laatstedatum, performance as performance, potentie as potentie FROM beoordeling WHERE groep = '16' GROUP BY id_talent
Dan krijg ik bij laastedatum te zien 2023-02-01 en bij performance en potentie het getal 1 en 1
Als ik in de datbase kijk zou dit dus getal 2 en 2 moete zijn.
Toevoeging op 01/02/2023 12:46:17:
Ik krijg niet de cellen er uit zeg maar die bij de rij hoort van de datum
Zoals gezegd: wat je aan gewone kolommen toevoegt bij SELECT _moet_ ook komen bij GROUP BY
Begrijp hem niet helemaal. Ik wil gewoon hebben dat hij de RIJ laat zien van de laatste datum van het talent. En ik moet meer weergaves krijgen als het natuurlijk verschillende talenten zijn
Als je meerdere weergave wilt zien, niet je in PHP wel een while() gebruiken.
Je kunt eest een query draaien die de laatste datum per talent ophaalt:
En dat joinen met een algement query:
Code (php)
1
2
3
4
2
3
4
SELECT b.*
FROM beoordelingen b
JOIN (SELECT talent_id, MAX(datum) masdatum FROM beoordelingen GROUP BY talent_id) AS sub
ON sub.talent_id = b.talent_id AND sub.maxdatum = b.datum
FROM beoordelingen b
JOIN (SELECT talent_id, MAX(datum) masdatum FROM beoordelingen GROUP BY talent_id) AS sub
ON sub.talent_id = b.talent_id AND sub.maxdatum = b.datum
NB: ik weet even niet zeker of ik de haakjes in de join regel goed heb staan, en of "AS sub" helemaal klopt.
Toevoeging op 01/02/2023 15:44:12:
en misschien kun je nog wat leuks vinden op https://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html