Verkrijg laatste versie
Ikzelf had al iets in de trand van onderstaand voorbeeld geprobeerd maar dat werkt uiteraard voor geen meter.
Code (php)
1
"SELECT max(date), max(time), title, guide_id, member FROM `site_guides_guilds` GROUP BY guide_id"
BVD,
Joop
Als je je datums en tijden nu in één DATETIME op zou slaan, zou het misschien al beter werken. Hij moet nu van beiden een max pakken, terwijl er waarschijnlijk een andere max(tijd) is dan max(datum), omdat tijden sneller elkaar overschrijden dan data. Hij moet dan een keuze maken, en zou dus waarschijnlijk de verkeerde keuze maken. Een datetime pakt wel de laatste.
Groot nadeel is wel dat je dan elke keer weer die query moet uitvoeren, dus als je 111111 items er in hebt staan, moet je dus ook zo vaak die query uitvoeren, inverband met je LIMIT.
Maar misschien 'praat ik poep'... :P
@Mark: veel makkelijker het met SQL te doen. Sneller en ook nog eens korter, dus ruimte besparender.
Je hebt gelijk. Alweer...:P
Je was ook eerder trouwens, ik was nog aan het typen... :P Maar goed ik had t al in de gaten dat het geen super snelle oplossing zou worden, maar wou toch even een steentje bijdragen. Leer ik ook weer hoe t dus niet moet. :D
\EDIT
Blijft er een ding over, hij wil ook checken of die andere id, of daar maar 1 van is, hoe wil je dat doen dan? Je kunt er dan geen limit aangeven of wel?
Gewijzigd op 01/01/1970 01:00:00 door mark moes
Zoiets? Heb alleen het idee dat database model niet echt deugd, maar ja.
edit: Limit verwijdert, je wilt er niet maar 1 :P
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
En dan nog even alle opgevraagde velden in de GROUP BY meenemen.
Klaasjan Boven schreef op 30.03.2009 23:01:
En dan nog even alle opgevraagde velden in de GROUP BY meenemen.
Want? Hij wil toch alleen groeperen op guide_id? En er wordt ook geen MAX/COUNT/etc meer gebruikt...
edit: Even getest, merk dat het sowieso niet werkt :S Ook al snap ik dat niet. Bij mij ordert hij pas na de groepering... Dacht dat het wel hoorde te werken :S
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
GROUP BY gebruik je alleen icm COUNT, MAX ed. Voor unieke records gebruik je DISTINCT
Ik zal date en time wel even in een variable gooien.
@Klaasjan Boven:
Het is de bedoeling de complete row te krijgen en niet alleen de guide_id. Van elke guide_id moet ik de laatste row krijgen (in het voorbeeld is ID 1 een verouderde versie van ID 2 en moet ID 1 dus weggelaten worden)
LIMIT?
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.
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.
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.
Code (php)
1
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!!)
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Met de volgende query heb ik het geprobeerd niet het goeie resultaat.:
Code (php)
1
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.
edit: backticks vanwege je reserved words als kolomnamen (nog een reden om je database om te gooien!!)
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.
Code (php)
1
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"
Code (php)
1
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.