Vad vill du uppnå? Vad menar du med att det inte fungerar?
Det står i Mysql-manualen att om man använder group by på det sättet så kan det ge oväntade resultat. Det är inte standard att skriva så där.
8 svar · 294 visningar · startad av Jörgen HP
Hej!
Vill gruppera följande, men den vill ej grupperas:
strSQL ="SELECT Categorier.IntForumId, Categorier.ForumName, Categorier.ForumUse, Categorier.ForumThreads, " & _
"Categorier.ForumPosts, Inlagg.dteDate, Svar.Svar_dteDate, Categorier.ForumModerator FROM b1180.Categorier " & _
"INNER JOIN b1180.Inlagg ON " & _
"Categorier.IntForumId = Inlagg.Categori_Id " & _
"INNER JOIN b1180.Svar ON Inlagg.Categori_Id = Svar_ForumId " & _
"GROUP BY Categorier.ForumName"
Den fungerar bra i övrigt, jag har kanske klantat någonstans?
mvh Jörgen
Vad vill du uppnå? Vad menar du med att det inte fungerar?
Det står i Mysql-manualen att om man använder group by på det sättet så kan det ge oväntade resultat. Det är inte standard att skriva så där.
Hej!
Jag vill hämta:
IntForumId,ForumName,ForumUse,ForumThreads,ForumPosts, ForumModerator från tabellen Categorier
dteDate från tabellen inlägg
Svar_dteDate från tabellen svar
Sedan loopar jag recsetet så ja får något i stil med:
Forum | Trådar | Inlägg | Senaste inlägg | Modeartor
Första Forumet | 96 | 234 | 2001-08-12 | Kalle
Andra Forumet | 116 | 576 | 2001-08-14 | Hugo
Tredje Forumet | 12 | 21 | 2001-08-15 | Hobbe
Den skriver i nuvarande stund ut alla uppgifter men bara det forumet som har ForumId 3. De forumen som har forumId 2 eller 1 skrivs inte ut. Så resultatet är nu:
Tredje Forumet | 12 | 21 | 2001-08-15 | Hobbe
istället för:
Första Forumet | 96 | 234 | 2001-08-12 | Kalle
Andra Forumet | 116 | 576 | 2001-08-14 | Hugo
Tredje Forumet | 12 | 21 | 2001-08-15 | Hobbe
Så som det ser ut nu är jag glad om det funkar, kan inga standarder
Hajar ni?
Mvh Jörgen
Att du bara får fram poster för forumid 3 beror inte på group by utan mer på att det inte blir någon match i ditt join-villkor.
Använder du rätt kolumner i ditt join-villkor? Jag tycker att det ser konstigt ut då du har inlagg.categori_id med i båda on-klausulerna.
Sen så behöver du nog en outer join mellan inlägg och svar då det kan finnas inlägg som inte har några svar.
Om jag förstår din datamodell rätt så borde själva group by biten se ut
SELECT Categorier.IntForumId, Categorier.ForumName, Categorier.ForumUse, Categorier.ForumThreads,
Categorier.ForumPosts, Inlagg.dteDate, max(Svar.Svar_dteDate) as svar_dteDate, Categorier.ForumModerator
...
group by Categorier.IntForumId, Categorier.ForumName, Categorier.ForumUse, Categorier.ForumThreads,
Categorier.ForumPosts, Inlagg.dteDate,
Categorier.ForumModerator
Hej!
Jag har relation mellan tabellerna med hjälp av ForumId, Joiner följer mänster:
SELECT * FROM Table1 INNER JOIN table2 ON tabell1.fält = tabell2.fält
INNER JOIN Table3 ON tabell2.fält2 = Table3.fält
tabell2.fält2. vadå fält 2 jag har bara 1 forumid i varje tabell.
outer join
Hur myglar man in den i sammanhanget?
mvh Jörgen
Jag måste ha en beskrivning av din datamdodell. Är det den som PatrikB föreslog i ett tidigare inlägg?
Outer join:
select * from a left outer join b
on a.id = b.id
innebär att man får alla rader från den vänstra tabellen (a) oavsett om det finns matchande rader i den högra tabellen (b).
Okey, tack larsg, då vet jag hur en left outer join fungerar.
Mina tabeller ser ut enligt nedan:
Tabell Categorier:
IntForumId
ForumUse
ForumName
ForumModerator
Tabell Inlagg:
MessId
Subject
Comment
dteDate
AnvId
Catogori_Id
Tabell svar:
Svar_Id
Svar_Comment
Svar_MessId
Svar_ForumId
Svar_AnvId
Svar_dteDate
Relation mellan alla tabeller med Svar_ForumId, Catogori_Id, IntForumId
Relation mellan Svar och Inlagg
Svar_MessId, MessId
vänligen Jörgen
Hej!
Hittade en fungerande version, nu ska jag bara fixa till maxdatum också.
lägger ut så kanske det hjälper någon annan också.
strSQL ="SELECT Categorier.*, Inlagg.dteDate," & _
" Svar.Svar_dteDate, Inlagg.dteDate " & _
"FROM " & _
"b1180.Categorier LEFT JOIN b1180.Inlagg " & _
"ON Inlagg.IntForumId = Categorier.IntForumId " & _
"LEFT JOIN " & _
"b1180.Svar ON Inlagg.IntForumId = Svar.IntForumId " & _
"group by Categorier.IntForumId "
mvh Jörgen
SELECT C.ForumName, max (case when I.dteDate > S.Svar_dteDate then
I.dteDate else s.svar_dteDate end) as dteDate,
count(distinct messid) as threads,
count(*) as total, c.forummoderator
FROM b1180.Categorier as c LEFT JOIN b1180.inlagg as i
ON i.categori_id = C.IntForumId
LEFT JOIN b1180.svar as s
ON I.messid = S.svar_messid
group by C.ForumName, c.forummoderator
med reservation för att det inte är uttestat med Mysql.