webForumDet fria alternativet

Sortera efter inlägget med senaste svaret...

Databaser & SQL

7 svar · 413 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hejsan!

Jag håller på att bygga ett forum, och på sidan där jag listar alla huvudtrådar (ParentId = 0) vill jag alltså att dom skall listas ut efter det inlägg med det senaste svaret.

Jag har testat en jäkla massa kombinationer på Selects med subquerys utan framgång...

Jag skulle ju kunna lösa det på andra sätt än i SQLsträngen, det känns väldigt onödigt och mer resurskrävande än att ta det direkt ur SQLen...

Nuvarande SQLsträng:

strSQL = "SELECT * FROM tblMessages WHERE tblMessages.ForumID = "
strSQL = strSQL & forumid & " AND tblMessages.ParentMessageID = 0 "
strSQL = strSQL & "AND tblMessages.Subject <> ''"
strSQL = strSQL & " ORDER BY Dateofpost DESC"

Mvh, vide

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

[Redigerat av Vide den 05 feb 2001]

Medlem sedan juni 200032 967 inlägg
#2

hej vide.

jag hade gett mig på en self-join. (wow, det ordet två gånger på samma dag ;) )

exempel:

strSQL = "select a.* from tblMessages as a, tblMessages as b "
strSQL = strSQL & "where a.forumid = " & forumid & " and a.MessageID = b.ParentMessageID and a.ParentMessageID = 0 "
strSQL = strSQL & "order by b.Dateofpost desc"

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

Medlem sedan dec. 19998 577 inlägg
#3

Ojdå, det funkade ju nästan jättebra... du är en klippa @nders :)

Dock ett litet fel... Nu listas alla inlägg som har svar (i rätt ordning), men inlägg som inte har något svar kommer inte med... Och jag har aldrig hålt på med self-join förut så jag fattar inte hur man skall lösa det på ett bra sätt... :)

Mvh, Vide

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

Medlem sedan juni 200032 967 inlägg
#4

då får du prova dig på en left outer self-join. yeah!

men det klarar ju du, grabben. :)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>

Medlem sedan dec. 19998 577 inlägg
#5

Sorry @nders, jag måste göra dig besviken... mina kunskaper i Joins är inte speciellt bra ännu... även om jag fattar lite om hur det går till, så kan jag inte förstå hur detta skall gå ihop... :(

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

Medlem sedan dec. 200012 464 inlägg
#6

One OJ coming up

strSQL = "select a.* from tblMessages as a left outer join tblMessages as b "
strSQL = strSQL & "on a.forumid = " & forumid & " and a.MessageID = b.ParentMessageID and a.ParentMessageID = 0 "
strSQL = strSQL & "order by b.Dateofpost desc"

En left outer join tar alla rader i vänstra tabellen (som uppfyller villkoren). Om det inte finns någon match i den högra så fylls det i med null i de kolumner som kommer från den tabellen, annars fungerar det som en vanlig join.

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 19998 577 inlägg
#7

Hmm... blev lite konstigt det där... :)

Jag glömde att berätta att mitt forum är trådat och därav gör jag ju en rekursiv sökning. Så sökningen funkar bra, enda felet är att den reknar bara det senaste inlägget ett i djup. Sedan tar den ju alla inlägg (inte bara parent = 0) skumt nog... nu blir jag bara mer förvirrad... ;)

Skall jag bygga om databasen så att jag har ett "mother"-fält, så jag lägger in det absolut första inläggets id i tråden?

Eller?

Mvh, Vide

------------------
Nu har du sjungit på sista refrängen
Jourhavande Vide

Medlem sedan dec. 200012 464 inlägg
#8

Skall jag bygga om databasen så att jag har ett "mother"-fält, så jag lägger in det absolut första inläggets id i tråden?

Utan att ha tänkt alltför mycket så låter det ok.
Håller med om att man känner sig lite yr!

------------------
essentitia preter non sans multiplicandum

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