Avatar billede mvk Nybegynder
04. marts 2004 - 10:04 Der er 12 kommentarer og
1 løsning

Definerer SQL i forhold til det jeg vil vise

jeg er ved at sætte mit første forum op og vil vise: Overskrift til indlæg, antal svar til dette indlæg, navnet på den som har oprettet indlæget, antal gange indlæget er vist, samt sidste svar på indlæget. Link: http://www.gutternes.dk/forum.asp

for at vise dette trækker jeg på 3 tabeller i min access database. SQL: "SELECT LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, posts.Date, posts.Time, posts.userID  FROM thread, users, posts  WHERE thread.userID = IDuser ORDER BY IDthread DESC"

Problemet er at den gentager alle posterne 3 gange som er det antal posts der er til den første + det tidspunkt den viser er det der henviser til de 3 posts (der er ingen posts til nogen andre threads)

Hvad gør jeg galt - hvordan burde jeg gøre det ?
Avatar billede fennec Nybegynder
04. marts 2004 - 10:10 #1
prøv med:
"select distinct LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, posts.Date, posts.Time, posts.userID  FROM thread, users, posts  WHERE thread.userID = IDuser ORDER BY IDthread DESC"
Avatar billede mvk Nybegynder
04. marts 2004 - 10:23 #2
no luck :(
Avatar billede nute Nybegynder
04. marts 2004 - 10:26 #3
hmm ... jeg ville nok have gjort det på en lidt anden måde. Du har nok en angivelse i din database om et indlæg er et indlæg eller en opfølging ? Altså om inlægget er "i roden" eller ikke ?

hvordan ser dine tabeller ud ? hvordan ser tabellen ud der indeholder dine indlæg ?

/nute
Avatar billede fennec Nybegynder
04. marts 2004 - 10:27 #4
Så lige du mangler en join..... måske noget i denne retning:

FROM thread, users, posts  WHERE thread.userID = IDuser and posts.xxx=xxx
Avatar billede mvk Nybegynder
04. marts 2004 - 11:55 #5
thread tabel:
IDthread
userID
Headline
Text
Date
Time
Views

posts tabel:
IDpost
userID
threadID
Headline
Text
Date
Time

users tabel:
IDuser
Name
...
Avatar billede mvk Nybegynder
04. marts 2004 - 11:56 #6
kunne også have lagt dem sammen og givet en type for thread eller post...
Avatar billede fennec Nybegynder
04. marts 2004 - 11:58 #7
prøv denne:

"SELECT LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, posts.Date, posts.Time, posts.userID  FROM thread, users, posts  WHERE thread.userID = IDuser and posts.threadID=thread.IDthread ORDER BY IDthread DESC"
Avatar billede mvk Nybegynder
04. marts 2004 - 12:03 #8
http://www.gutternes.dk/forum.asp
så kommer der kun den record ud som har posts tilknyttet og den gentages 3 gange for det antal posts der er
Avatar billede fennec Nybegynder
04. marts 2004 - 12:08 #9
Så skal vi til at lave outer join.....

"SELECT LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, posts.Date, posts.Time, posts.userID  FROM thread left join users on thread.userID = IDuser left outer join posts on posts.threadID=thread.IDthread ORDER BY IDthread DESC"
Avatar billede mvk Nybegynder
04. marts 2004 - 12:11 #10
Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'thread.userID = IDuser left outer join posts on posts.threadID=thread.IDthread'.

/forum.asp, line 13
Avatar billede fennec Nybegynder
04. marts 2004 - 12:33 #11
jeg kan ikke lige se hvorfor den fejler, men hvis du bruger Access skal joins i () hvis der er flere af dem....

"SELECT LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, posts.Date, posts.Time, posts.userID  FROM ((thread left join users on thread.userID = IDuser) left outer join posts on posts.threadID=thread.IDthread) ORDER BY IDthread DESC"
Avatar billede nute Nybegynder
04. marts 2004 - 12:33 #12
hmm ... hvorfor ikke lave nogle felter på din 'thread' tabel der indeholder sidste indlæg. det ser ikke ud til at du skal bruge så meget info fra din 'posts' tabel at der er behov for at joine den ind. Jeg ville have lavet nogle dato felt ind i thread tabellen (lastPostDate og lastPostTime, og så ville jeg have fyret af denne SQL:

SELECT LEFT(thread.Headline,50), Name, Views, IDthread, IDuser, lastPostDate, lastPostTime, posts.userID, ( SELECT COUNT(*) FROM posts WHERE posts.threadID = IDthread) AS antalPosts FROM thread, users WHERE thread.userID = IDuser ORDER BY IDthread DESC

/nute
Avatar billede mvk Nybegynder
16. marts 2004 - 09:09 #13
lidt omlægning i databasen og denne sql så virkede det :)
SELECT LEFT(thread.Headline,35) AS Headline50, Name, thread.Views, thread.IDthread, IDuser, thread.CreateDate, thread.CreateTime, COUNT (t1.threadID) as Svar  FROM (thread LEFT JOIN [users] ON thread.userID = users.IDuser) LEFT JOIN thread as t1 ON  thread.IDthread = t1.threadID  WHERE thread.threadID = 0  GROUP BY LEFT(thread.Headline,35), Name, thread.Views, thread.IDthread, IDuser, thread.CreateDate, thread.CreateTime  ORDER BY thread.IDthread DESC
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester