sawMedlem sedan mars 20011 880 inlägg Innan jag berättar om mitt problem, vill jag visa hur min databas ser ut.
Tabellen Forum
ForumID Primärnyckel
InlaggId Relation till tabbelen Person PerID
ReplyID är det unika nummeret som binder ihop inläggen och svar.
Amne
Hits hur många gånger forumet har lästs
Icon
Svar hur många som har svarat på forumet
org Om det finns svar(måste nog ta bort denna)
Tabellen Inlagg
InID Primärnyckel
InlaggID
Datum
PersonID
ReplyID
Inlagg
Tabellen Person
PersonID
Namn
Epost
Skrivit hur många inlägg personen gjort
InläggID
Relationerna är emellan
Forum.ForumID till Inlagg.InlaggID
Och
Inlagg.PersonID till Person.PersonId
Vad jag vill åstakomma är ungefär som på detta forum. På förstasidan skall man bara se den som har startat forumet och därefter klicka sig vidare för att kunna läsa alla inlägg.
Jag använder denna SQL
RS.OPEN "SELECT Forum.ForumId, Forum.InlaggID, Forum.ReplyID, Forum.Amne, Inlagg.Datum, Forum.Hits, Forum.Icon, Forum.Svar, Forum.Org, Person.PersonId, Person.Namn, Person.Epost, Person.Skrivit, Inlagg.InlaggId, Inlagg.Inlagg "&_
" FROM Person INNER JOIN (Forum RIGHT JOIN Inlagg ON Forum.ForumId = Inlagg.InlaggId) ON Person.PersonId = Inlagg.PersonId WHERE Org = TRUE ORDER BY Datum DESC;", connection, adopenkeyset, adlockoptimistic
Men jag kan inte få till det bra.
T ex:
Bosse har börjat att skriva
Johan svara
Karl svara osv
SQL:en ovan visar alla tre, fast den skulle bara visa Bosses första inlägg.
Har ni något bra tips???
------------------
saw
__
saw@songer.com
www.mp3.com/saw_songer
__
sawMedlem sedan mars 20011 880 inlägg Jag kom på ett bra sätt, och löste det problemet.
------------------
saw
__
saw@songer.com
www.mp3.com/saw_songer
__
@ndersMedlem sedan juni 200032 969 inlägg Vad kom du på för bra sätt? :)
Mvh,
sawMedlem sedan mars 20011 880 inlägg Jo jag satte in en kryssbox i tabellen inlagg, och ser till att enbart det första inlägget så fylls den. Smart??
Då är det ju enkelt att ta fram vad jag ville ha.
Men mitt nästa problem är inte så enkelt.
När jag klicka på denna länk:
<A HREF="forhand.asp?ForumID=<%=RS("ForumID")%>&InlaggId=<%=RS("InlaggId")%>&ReplyId=<%=RS("ReplyId")%>" TITLE="Läs mera">
så kommer jag till sidan som skall visa medelanden.
Men jag får inte fram dom bra.
Endera så ser jag enbart första medelandet, eller så uppreppas medellanden dubbelt.
Så här ser SQL:en ut:
If Request.Querystring("ReplyID")>=1 Then
SQL="SELECT * FROM Forum, Inlagg,Person WHERE Forum.ReplyID=" & Request("ReplyID") &"AND Inlagg.ReplyID=" & Request("ReplyID") &" ORDER BY Inlagg.Datum"
Else
SQL="SELECT Forum.ForumId, Forum.InlaggID, Forum.ReplyID, Forum.Amne, Inlagg.Datum, Forum.Hits, Forum.Icon, Forum.Svar, Person.PersonId, Person.Namn, Person.Epost, Person.Skrivit, Inlagg.InlaggId, Inlagg.Inlagg "&_
" FROM (Forum RIGHT JOIN Inlagg ON Forum.ForumId = Inlagg.InlaggId) INNER JOIN Person ON Inlagg.PersonId = Person.PersonId "&_
" WHERE Forum.ForumID=" & Request("ForumID") &" AND Forum.ReplyID=" & Request("ReplyID") &" ORDER BY Forum.InlaggID,Forum.ForumId"
End If
Något förslag om hur jag skall fixa det?
------------------
saw
__
saw@songer.com
www.mp3.com/saw_songer
__
LarsGMedlem sedan dec. 200012 464 inlägg I din första select så har du inget joinvillkor mellan inlagg och person-tabellen
SQL="SELECT * FROM Forum, Inlagg,Person WHERE Forum.ReplyID=" & Request("ReplyID") &"AND Inlagg.ReplyID= forum.replyid and inlagg.personid = person.personid ORDER BY Inlagg.Datum"
Borde det inte vara left join i din andra select?
SQL="SELECT Forum.ForumId, Forum.InlaggID, Forum.ReplyID, Forum.Amne, Inlagg.Datum, Forum.Hits, Forum.Icon, Forum.Svar, Person.PersonId, Person.Namn, Person.Epost, Person.Skrivit, Inlagg.InlaggId, Inlagg.Inlagg "&_
" FROM (Forum LEFT JOIN Inlagg ON Forum.ForumId = Inlagg.InlaggId) LEFT JOIN Person ON Inlagg.PersonId = Person.PersonId "&_
" WHERE Forum.ForumID=" & Request("ForumID") &" AND Forum.ReplyID=" & Request("ReplyID") &" ORDER BY Forum.InlaggID,Forum.ForumId"
------------------
essentitia preter non sans multiplicandum
sawMedlem sedan mars 20011 880 inlägg Tack LarsG du löste ett stort problem.
Det visade sig att
SQL="SELECT * FROM Forum, Inlagg,Person WHERE Forum.ReplyID=" & Request("ReplyID") &"AND Inlagg.ReplyID= forum.replyid and inlagg.personid = person.personid ORDER BY Inlagg.Datum"
var allt som behövdes, inte två olika.
Som jag ser det nu (jag är no lite tuff nu) så har jag en kanongrund att stå på, så nu är det bara ögongodis kvar.
Tack igen.
------------------
saw
__
saw@songer.com
www.mp3.com/saw_songer
__
iceM2Medlem sedan mars 2001243 inlägg När det ändå tas upp så kanske någon skulle vilja förklara när det är lämpligt att använda innerjoin, leftjoin... Har aldrig fattat det, tacksam för en bra förklaring... Fixade en sql bok men där står det inget om det...
------------------
Ar i USA for tillfallet, kan ej anvanda svenska tecken, sorry...
LarsGMedlem sedan dec. 200012 464 inlägg Inner join:
select * from a inner join b on [i]search_condition[/i]
returnerar alla poster där search_condition är sant.
Outer left join
select * from a left outer join b on [i]search_condition[/i]
Fungerar som en inner join frånsett de att poster från den vänstra tabellen returneras även om det inte finns någon post i den högra tabellen som uppfyller villkoret.
Då inner och outer join ger olika resultat så kan man inte säga att endera är mer lämplig.
ett exempel
A:
C1!C2
-----
11!AA
12!BB
13!CC
B:
C3!C4
-----
11!QQ
13!PP
14!RR
select * from a inner join b on c1 = c3
ger
C1!C2!C3!C4
-----------
11!AA!11!PP
13!CC!13!RR
select * from a left outer join b on c1 = c3
ger
C1!C2!C3!C4
-----------
11!AA!11!PP
12!BB!nu!nu
13!CC!13!RR
nu står för null
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 10 jan 2002]
iceM2Medlem sedan mars 2001243 inlägg Tack så mycket LarsG!
------------------
Ar i USA for tillfallet, kan ej anvanda svenska tecken, sorry...
[Redigerat av iceM2 den 11 jan 2002]