AampyMedlem sedan feb. 20011 498 inlägg Har denna lilla sql-sats:
SELECT
ti.owner_id,
m.usr,
ti.datum,
ti.team_name,
ti.id,
ti.description,
tm.last_visit,
tmsg.datum
FROM
team_members tm
inner join team_info ti on ti.id = tm.team_id
inner join members m on ti.owner_id = m.id
left outer join team_messages tmsg on tmsg.team_id = tm.team_id
WHERE
tm.userid = "&session("userid")&"
GROUP BY
5
ORDER BY
ti.team_name asc,
tmsg.datum desc
Denna fråga fungerar men jag får inte ut det resultatet som jag förväntar mig. Jag vill få ut de senaste inläggen i tabellen 'team_messages', nu får jag ut de äldsta.
Testade med att byta plats på kolumnerna i ORDER BY-klausulen men med utan resultat, får inte fram de nyaste inläggen.
Hur ska man formulera frågan så att jag får ut de senaste inläggen från tabellen 'team_messages'?
Vill också sortera efter 'team_name' först.
DBMS: MySQL 4.0
PDahlenMedlem sedan apr. 2004778 inläggDet du sätter först i ORDER BY bestämmer ordningen.
ORDER BY tmsg.datum DESC, ti.team_name asc
Är vad man använder om man ska ha senaste först.
Är tmsg.datum verkligen ett datumfält i databasen? Om det är ett vanligt textfält så sorteras det annorlunda.
AampyMedlem sedan feb. 20011 498 inlägg Om du hade läst mitt inlägg lite mer noggrannt så hade du sett att jag redan har prövat det där. Fungerar inte.
tmsg.datum är självklart ett datumformat i databasen.
LLarsGMedlem sedan dec. 200012 464 inlägg SELECT
ti.owner_id,
m.usr,
ti.datum,
ti.team_name,
ti.id,
ti.description,
tm.last_visit,
tmsg1.datum
FROM
team_members tm
inner join team_info ti on ti.id = tm.team_id
inner join members m on ti.owner_id = m.id
left join team_messages tmsg1 on tmsg1.team_id = tm.team_id
left join team_nessages tmsg2 on tmsg1.team_id = tmsg2.team_id
WHERE
tm.userid = "&session("userid")&"
GROUP BY
ti.owner_id,
m.usr,
ti.datum,
ti.team_name,
ti.id,
ti.description,
tm.last_visit,
tmsg1.datum
having tmsg1.datum = max(tmsg2.datum)
or tmsg1.datum is null
ORDER BY
ti.team_name asc
AampyMedlem sedan feb. 20011 498 inlägg Nu får jag fram det resultatet jag vill ha men frågan tar flera sekunder att generera. Har satt index på datumkolumnerna.
Går det inte att optimera frågan litegranna?
LLarsGMedlem sedan dec. 200012 464 inlägg Om du låter bli outer join och tar bort or-delen från having då?
AampyMedlem sedan feb. 20011 498 inlägg Frågan genereras lite snabbare när jag tog bort or-delen, men vad menar du med att låta bli outer join? Finns väl ingen outer join i frågan du skrev?
Och en annan sak. Vad är det för skillnad på 'inner join' och 'left join'?
LLarsGMedlem sedan dec. 200012 464 inlägg en left join är en outer join. Om du tar bort den så innebär det att du inte får några poster för de lag som inte har något meddelande alls.
AampyMedlem sedan feb. 20011 498 inlägg Så man kan alltså lika gärna skriva left join istället för outer join?
Fast jag vill ju ha kvar left join...
LLarsGMedlem sedan dec. 200012 464 inlägg Nej, en outer join är antingen left eller right. Man kan utelämna ordet outer om man vill.
AampyMedlem sedan feb. 20011 498 inlägg Har hittat ett fel i sql-frågan. När laget inte har några inlägg så skrivs inte laget ut. Varför?
LLarsGMedlem sedan dec. 200012 464 inlägg SELECT
ti.owner_id,
m.usr,
ti.datum,
ti.team_name,
ti.id,
ti.description,
tm.last_visit,
tmsg1.datum
FROM
team_members tm
inner join team_info ti on ti.id = tm.team_id
inner join members m on ti.owner_id = m.id
left join team_messages tmsg1 on tmsg1.team_id = tm.team_id
left join team_nessages tmsg2 on tmsg1.team_id = tmsg2.team_id
WHERE
tm.userid = "&session("userid")&"
GROUP BY
ti.owner_id,
m.usr,
ti.datum,
ti.team_name,
ti.id,
ti.description,
tm.last_visit,
tmsg1.datum
having tmsg1.datum = max(tmsg2.datum)
or tmsg1.datum is null
or max(tmsg2.datum) is null
ORDER BY
ti.team_name asc