webForumDet fria alternativet
Logga in / Bli medlem

sql - som vanligt

Databaser & SQL

4 svar · 191 visningar · startad av Jörgen HP

Medlem sedan feb. 20012 412 inlägg
Frågan#1

Hej,

Först vill jag säga att jag vet att jag skulle behöva en union, men det finns ju inte :(

Har lite kod som ser ut så här:

'##-- Hämta senaste debattör och senaste inlägg --

sql ="Select Profil.req_Username, Profil.AnvId, Inlagg.Inlagg_AnvId, Inlagg.MessId, Inlagg.Flyttat, Inlagg.IntForumId, Inlagg.Subject, Svar.Svar_AnvId, Svar.Svar_MessId " & _
" from Profil " & _
" INNER JOIN Inlagg " & _
" on Profil.AnvId = Inlagg.Inlagg_AnvId " & _

" INNER JOIN Svar " & _
" on Inlagg.Inlagg_AnvId = Svar.Svar_AnvId " & _

" WHERE Inlagg.IntForumId = "& RS("IntForumId") &"" & _
" OR Inlagg.Flyttat = "& RS("IntForumId") &"" & _
" order by Inlagg.MessId DESC LIMIT 1"

SET strSenaste = objDB.Execute(sql)

If strSenaste.EOF then

response.write " "

else

'##-- Skriv ut länk och namn på senaste debattör samt länk till senaste tråden --

end if

Det jag gör är att jag loopar ut alla forumavdelningar. Vid varje forumid ( RS("IntForumId") ) vill jag skriva ut senaste debattör och datum/tid.

Men problemet är att det blir bara rätt vid de tillfällen då senaste inlägget inte innehåller några svar. Finns det svar på en tråd då får jag inte ut rätt namn.

Jag vet att vi diskuterat tabellstruktur från och till (två tabeller Svar och Inlagg) och på den tiden kom vi fram till att denna var dne bästa, men vid vissa tillfällen är det nog inte så.

Hur som helst, några ideer på hur jag kan lösa detta problem på annat sätt?

mvh Jörgen :)

Medlem sedan dec. 200012 464 inlägg
#2

Jag tycker att det är samma problem som återkommer och det beror på att du skiljer på inlägg och svar.

tabellförslag

topics
-------
ID primary key räknare
topic titel på tråd

posts
------
id primary key räknare
topicid foreign key
is_original sant om första inlägg i tråd
postedBy användare
datePosted datum
post text

Medlem sedan feb. 20012 412 inlägg
#3

Hej,

löste det ganska enkelt efter en promenad. Jag bygger inte om tabellstrukturen nu när det nästan är klart.

En följdfråga om joinar:

Fram tills nu har jag provat mig fram.

Men vad får jag för skillnad i resultatet när jag använder varianterna outer, innner, left och right?

mvh Jörgen :)

Medlem sedan dec. 200012 464 inlägg
#4

outer är bara ett nyckelord som kan utelämnas dvs


a left outer join b

är samma som


a left join b

som är samma sak som


b right join a

Skillnaden mellan en inner och en outer join är att i en inner join får man enbart de poster som uppfyller villkoret i on.

I en left outer join så får man alla poster från den vänstra tabellen.

tex

a.id
--
1
2
3

b.id
--
1
2

a left join b on a.id = b.id

ger då

1 1
2 2
3 <null>

Medlem sedan feb. 20012 412 inlägg
#5

Tack LarsG, utan dig hade mina sql-kunskaper varit mer obefintliga än de är nu :e

mvh Jörgen :)

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