Ik moet de laatste versie krijgen van elke unieke guide_id (in onderstaand voorbeeld dus ID 2 en 3). Met welke query is dit te doen?


Ikzelf had al iets in de trand van onderstaand voorbeeld geprobeerd maar dat werkt uiteraard voor geen meter.
"SELECT max(date), max(time), title, guide_id, member FROM `site_guides_guilds` GROUP BY guide_id"


BVD,
Joop
Wat wil je dan doen met limit? Waar order je dan op?

Limit is onmogelijk...
Je wilt toch alleen het laatste? maak er gewoon een datetime veld van en schik deze DESC, limit en offset op 0 en 1 en voila. Als je iets bijwerkt schrijf je gewoon een automatische NOW() in je query.
Ik wil de laatste van elke unieke guide_id... Als me db gevuld is met (ff simpel getoond):

ID - GUIDE_ID - DATE
1 - 1 - 29-03-09
2 - 2 - 27-01-09
3 - 2 - 29-01-09
4 - 1 - 30-03-09
5 - 1 - 31-03-09

In bovenstaand voorbeeld wil ik alleen ID 5 en 3 aangezien de andere niet recent zijn.
Heb weer even zitten klooien, maar wat jij in je openingspost hebt werkt bij mij juist wel. Maar jij zit waarschijnlijk dan met je 2 datum velden (wat dus alsnog niet slim is).

Misschien dat het zo werkt, ook al is het nog steeds raadzaam je database aan te passen, 2 velden voor dezelfde datum is gewoon nutteloos.

SELECT MAX(ADDTIME(`date`,`time`)), id, guide_id, title, member FROM site_guides_guilds GROUP BY guide_id

edit: backticks vanwege je reserved words als kolomnamen (nog een reden om je database om te gooien!!)
Momenteel heb ik date en time samengevoegd:


Met de volgende query heb ik het geprobeerd niet het goeie resultaat.:
SELECT max(edited), title, guide_id, member FROM `site_guides_guilds` GROUP BY guide_id


Resultaat:


Zoals je ziet toont hij de datum goed maar bijvoorbeeld de titel niet...
WillemJan Z schreef op 31.03.2009 23:52
Heb weer even zitten klooien, maar wat jij in je openingspost hebt werkt bij mij juist wel. Maar jij zit waarschijnlijk dan met je 2 datum velden (wat dus alsnog niet slim is).

Misschien dat het zo werkt, ook al is het nog steeds raadzaam je database aan te passen, 2 velden voor dezelfde datum is gewoon nutteloos.

SELECT MAX(ADDTIME(`date`,`time`)), id, guide_id, title, member FROM site_guides_guilds GROUP BY guide_id

edit: backticks vanwege je reserved words als kolomnamen (nog een reden om je database om te gooien!!)


Je moet alle velden uit de select ook opnemen in de group by. Zie tutorial van Blanche "Group by het juiste gebruik ervan" Een betere database of een goed geconfigureerde mysql zou hier ook van over zijn nek gaan met de melding "NOT A SINGLE GROUP BY FUNCTION"
SELECT MAX(edited), id, guide_id, title, member FROM site_guides_guilds GROUP BY guide_id, id, title, member

Bedoel je zo iets? :P werkt uiteraard niet.
Deze query is technisch correct, daar zal het niet aan liggen. Dat je andere resultaten krijgt dan wat jij zoekt, dat zal dan liggen aan de vraag (query). Je vraagt nu de records op met de meest recente edit-datum.

Reageren