Sortera efter inlägget med senaste svaret...

Databaser & SQL

7 svar · 437 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Trådstart#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

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,

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

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. :)

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... :(

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.

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

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!

251 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)