Avatar billede mimi Nybegynder
04. december 2004 - 16:31 Der er 6 kommentarer

"Flette" tabeller

Jeg skal have gjort således, man i oversigten over de seneste nyheder kan se, hvor mange kommentarer, der er til de enkelte

nyheder på www.vibytaekwondoklub.dk

Selve nyhederne ligger i en tabel, der hedder "nyheder" og kommentarerne ligger i en tabel, der heddder "kommentarer". At få vist de rigtige kommentarer til den rigtige nyhed, når man klikker på den, har jeg gjort med:

SELECT * FROM kommentarer WHERE newsid = " & Request("id")

Nu er det så, at jeg i oversigten over "Sidste nyt" godt kunne tænke mig, at der stod:
"[overskrift]
(tilføjet d. [dato])
[X] kommentarer"

Men jeg har lidt problemer med at flette de to tabeller sammen, nu da nyhederne bliver valgt med:

SELECT * FROM nyheder ORDER BY ID DESC LIMIT 5

og der LOOP'es.

Ville være meget taknemmelig, hvis nogen kunne være behjælpelig med noget pseudokode, så jeg kan komme videre derfra. Har lavet et par eksperimenter, som ikke virkede, og nu er jeg helt blank...
Avatar billede mimi Nybegynder
04. december 2004 - 17:39 #1
Ehm... og hvordan tæller jeg egentlig antal records? For den skal jo ikke tælle alle records i tabellen "kommentarer", men kun f.eks. antal records, hvor newsid (fra "kommentarer") = id (fra "nyheder").

ER det lidt indviklet eller er det mig, der har fået bikset det sammen på en usmart måde fra starten? :S
Avatar billede ellebaek Nybegynder
05. december 2004 - 12:53 #2
hvis jeg forstår dig rigtigt...

Så vil du have vist antallet af kommentare ud for hver nyhed.
Der skal du ikke flette nogle tabeller når du vil det..

I stedet skal du blot gøre noget i stilen af:


set conn = server.createobject("adodb.connection")
sql = "SELECT * FROM nyheder ORDER BY ID DESC LIMIT 5"
set rs = conn.execute(sql)

while not rs.eof
sql = "select count(id) as antal from kommentarer where newsid = " & rs("id")
set rs2 = conn.execute(sql)
response.write rs("overskrift") & "<br>"
response.write "tilføjet d. " & rs("date") & "<br>"
response.write rs2("antal") & " kommentarer"
rs.movenext
wend

altså at du for hver nyhed tæller antallet af kommentarer...
Avatar billede mimi Nybegynder
27. december 2004 - 18:56 #3
Hm jaah, men det går den ikke helt med til. Det kører over mySQL-database (ved godt, det er usmart, men webhotellet understøttede ikke Access og jeg gad ikke skulle til at lære php...)

Og den brokker sig lidt over den connection string, du laver i dit eksempel. Jeg kan ikke helt hitte ud af at modificere den, så den passer til mit stykke kode, som ser sådan ud lige nu:

Set objRS = Server.CreateObject("ADODB.Recordset")
Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString="DRIVER={MySQL};SERVER=localhost;DATABASE=vibytaekwondokl;UID=*****;PWD=*****;"
objConn.Open

objRS.Open "SELECT * FROM nyheder ORDER BY ID DESC LIMIT 5", objConn, 1,3
set objRS = objConn.execute(SQL)

If Not objRS.EOF Then
DO WHILE NOT objRS.EOF

objRS.Open "select count(id) as antal from kommentarer where newsid = " & objRS("id"), objConn, 1,3
set objRS2 = objConn.execute(SQL)

response.write objRS("overskrift") & "<br>"
response.write "tilføjet d. " & objRS("date") & "<br>"
response.write objRS("antal") & " kommentarer"

objRS.movenext
LOOP

Den brokker sig jo lidt over det "set objRS2 = objConn.execute(SQL)", eftersom jeg ikke har noget "SQL = " og jeg kan ikke lige hitte ud af, hvordan jeg ændrer det, så syntaksen er i orden?
Avatar billede ellebaek Nybegynder
27. december 2004 - 19:09 #4
muligvis sådan her skal det se ud..

Set objRS = Server.CreateObject("ADODB.Recordset")
Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString="DRIVER={MySQL};SERVER=localhost;DATABASE=vibytaekwondokl;UID=*****;PWD=*****;"
objConn.Open

objRS.Open "SELECT * FROM nyheder ORDER BY ID DESC LIMIT 5", objConn, 1,3
set objRS = objConn.execute(SQL)

If Not objRS.EOF Then
DO WHILE NOT objRS.EOF
sql = "select count(id) as antal from kommentarer where newsid = " & objRS("id")
set rs = objConn.execute(sql)

response.write objRS("overskrift") & "<br>"
response.write "tilføjet d. " & objRS("date") & "<br>"
response.write rs("antal") & " kommentarer"

objRS.movenext
LOOP
Avatar billede mimi Nybegynder
27. december 2004 - 19:45 #5
Hmm...
"The application is using arguments that are of the wrong type, are out of acceptable range, or are in conflict with one another."

I denne linje ---> set objRS = objConn.execute(SQL)
Avatar billede ellebaek Nybegynder
27. december 2004 - 23:16 #6
muligvis fordi der er en fejl i typen...

virker måske sådan her:

Set objRS = Server.CreateObject("ADODB.Recordset")
Set objConn = Server.CreateObject("ADODB.Connection")

objConn.ConnectionString="DRIVER={MySQL};SERVER=localhost;DATABASE=vibytaekwondokl;UID=*****;PWD=*****;"
objConn.Open

objRS.Open "SELECT * FROM nyheder ORDER BY ID DESC LIMIT 5", objConn, 1,3
set objRS = objConn.execute(SQL)
sqlstr = ""
If Not objRS.EOF Then
DO WHILE NOT objRS.EOF
sql = "select count(id) as antal from kommentarer where newsid = " & CInt(objRS("id"))
sqlstr = sqlstr & sql &"<br>"
set rs = objConn.execute(sql)

response.write objRS("overskrift") & "<br>"
response.write "tilføjet d. " & objRS("date") & "<br>"
response.write rs("antal") & " kommentarer"

objRS.movenext
LOOP
response.write sqlstr

men skriv lige sqlerne herinde..
de bliver udskrevet nu...
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