ampyMedlem sedan feb. 20011 498 inlägg Har denna sql-sats:
SQL = "SELECT * " & _
" From forum_topics ft inner join forum_posts fp on ft.id_trad = fp.id_trad" & _
" left outer join members m on m.id = ft.user_id" & _
" WHERE ft.rum = '"&rummet1&"' order by ft.senasteinlagg desc, fp.id desc"
Den gör inte riktigt som jag vill. När jag skriver ut alla poster med hjälp av denna sql-sats så skriver den ut alla poster som finns i tabellen forum_posts. Men jag vill att den endast jag skriva ut alla poster som finns i forum_topics.
Fattar inte vad jag har gjort fel i sql-satsen.
Tabellerna ser ut som följande:
forum_topics
id_trad
subject
user_id
datum
rum
locked
senasteinlagg
ampymail
last
svar
forum_posts
id
id_trad
user_id
message
datum
members
id
username
Det jag vill göra är alltså först och främst hämta alla poster från tabellen forum_topics. Sen vill jag hämta det senaste inlägget från forum_posts där id_trad är lika med id_trad i tabellen forum_posts. Sen vil jag ju även veta namnet på user_id och den får jag alltså från tabellen members.
Vad har jag gjort för fel på min sql-sats?
LarsGMedlem sedan dec. 200012 464 inlägg SQL = "SELECT * " & _
" From forum_topics ft inner join forum_posts fp on ft.id_trad = fp.id_trad" & _
" left outer join members m on m.id = ft.user_id" & _
" WHERE ft.rum = '"&rummet1&"' " &_
" and fp.id in (select max(id) from forum_posts " & _
" where id_trad = fp.id_trad ) " & _
" order by ft.senasteinlagg desc, fp.id desc"
ampyMedlem sedan feb. 20011 498 inlägg På den får jag detta fel:
Microsoft OLE DB Provider for ODBC Drivers fel '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax near 'select max(id) from forum_posts where id_trad = fp.id_trad ) order by ft.sena' at line 1
LarsGMedlem sedan dec. 200012 464 inlägg Ah, Mysql och dess begränsningar. Får hitta på något annat.
Vad är senasteinlagg?
ampyMedlem sedan feb. 20011 498 inlägg Den innehåller det datum då det gjordes en post i den tråden. Man kan ju hämta det värdet i den andra tabellen (forum_posts) men det tar väl bara en massa tid?
LarsGMedlem sedan dec. 200012 464 inlägg QL = "SELECT * " & _
" From forum_topics ft inner join forum_posts fp " & _
" on ft.id_trad = fp.id_trad and fp.datum = ft.senasteinlagg" & _
" left outer join members m on m.id = ft.user_id" & _
" WHERE ft.rum = '"&rummet1&"' order by ft.senasteinlagg desc, fp.id desc"
ampyMedlem sedan feb. 20011 498 inlägg Den satsen fungerar perfekt men jag glömde att lägga till en sak :l
Värdet fp.user_id innehåller ju det id på den användare som skrev inlägget sist i tråden. Även det usernamet vill jag hämta från tabellen members. Går det att fixa eller får jag skapa ett nytt recordset?
LarsGMedlem sedan dec. 200012 464 inlägg QL = "SELECT ft.*,fp.*,m1.*,m2.username as lastPoster " & _
" From forum_topics ft inner join forum_posts fp " & _
" on ft.id_trad = fp.id_trad and fp.datum = ft.senasteinlagg" & _
" left outer join members m2 on m2.id = fp.user_ud " & _
" left outer join members m1 on m1.id = ft.user_id" & _
" WHERE ft.rum = '"&rummet1&"' order by ft.senasteinlagg desc, fp.id desc"
ampyMedlem sedan feb. 20011 498 inlägg Du är verkligen grym på SQL! :birp
Fast kan du förklara vad det är för skillnad på inner join och outer join?
@ndersMedlem sedan juni 200032 969 inlägg En outer join ger resultat även om inte joinvillkoret uppfylls, då är alla kolumner från den injoinade tabellen null. I en inner join kommer inte dessa poster med överhuvudtaget.
Fast jag kanske inte fick svara? ;)
Mvh,