webForumDet fria alternativet

Vill få fram senaste raden ur en tabell

Databaser & SQL

12 svar · 435 visningar · startad av ampy

Medlem sedan feb. 20011 498 inlägg
Frågan#1

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

Medlem sedan apr. 2004778 inlägg
#2

Det 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.

Medlem sedan feb. 20011 498 inlägg
#3

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.

Medlem sedan dec. 200012 464 inlägg
#4
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
Medlem sedan feb. 20011 498 inlägg
#5

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?

Medlem sedan dec. 200012 464 inlägg
#6

Om du låter bli outer join och tar bort or-delen från having då?

Medlem sedan feb. 20011 498 inlägg
#7

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'?

Medlem sedan dec. 200012 464 inlägg
#8

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.

Medlem sedan feb. 20011 498 inlägg
#9

Så man kan alltså lika gärna skriva left join istället för outer join?

Fast jag vill ju ha kvar left join...

Medlem sedan dec. 200012 464 inlägg
#10

Nej, en outer join är antingen left eller right. Man kan utelämna ordet outer om man vill.

Medlem sedan feb. 20011 498 inlägg
#11

Har hittat ett fel i sql-frågan. När laget inte har några inlägg så skrivs inte laget ut. Varför?

Medlem sedan dec. 200012 464 inlägg
#12
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
Medlem sedan feb. 20011 498 inlägg
#13

Tack! :bire

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)