Avatar billede psyclown Nybegynder
18. december 2002 - 21:12 Der er 5 kommentarer og
2 løsninger

top 5 fra to tabeller

Nu har jeg siddet og bixet med det her i 2 dage og jeg kan stadigt ikke få det til at virke som jeg vil også var min sidste løsning eksperten.

Jeg har lavet et forum, med følgende 3 tabeller:

FORUMS: F_KatID, F_NAVN, F_BESKRIVELSE

F_EMNER: EID, FID, UsrID, F_E_DATO, F_E_BRUGERNAVN, F_E_EMNE, F_E_POST

F_SVAR: SID, EID, FID, UsrID, F_S_DATO, F_S_BRUGERNAVN, F_S_POST

I dette tilfælde, skal vi kun benytte os af de to nederste tabeller.
Jeg har bixet med at lave top 5 over de nyeste indlæg i forummet, det er både emner og svar jeg taler om.
Jeg har lavet følgende, som ikke virker som det skal:

Set conntemp = Server.CreateObject("ADoDB.Connection")
conntemp.open DSN
SQLNYEINDLAEG = "SELECT TOP 5 F_EMNER.EID, F_EMNER.FID, F_EMNER.F_E_DATO, F_EMNER.F_E_EMNE, "
SQLNYEINDLAEG = SQLNYEINDLAEG & "F_SVAR.EID, F_SVAR.FID, F_SVAR.F_S_DATO "
SQLNYEINDLAEG = SQLNYEINDLAEG & "FROM F_EMNER INNER JOIN F_SVAR ON (F_EMNER.FID = F_SVAR.FID) "
SQLNYEINDLAEG = SQLNYEINDLAEG & "ORDER BY F_SVAR.F_S_DATO DESC"
Set rsNyeIndlaeg = conntemp.execute(SQLNYEINDLAEG)

If Not (rsNyeIndlaeg.BOF or rsNyeIndlaeg.EOF) Then

    Response.Write "                <table style=""border-left: 1 solid #000000; border-right: 1 solid #000000; border-bottom: 1 solid #000000"" bgcolor=""#336699"" align=""center"" border=""0"" cellpadding=""1"" cellspacing=""0"" width=""100%"">"& vbCrLf
    Response.Write "                    <tr>"& vbCrLf
    Response.Write "                        <td>"& vbCrLf
    Do While Not rsNyeIndlaeg.EOF
            Response.Write "                            <img src=""images/pil.gif""> "& FormatDate(rsNyeIndlaeg("F_S_DATO"), 4) &" - <a href=""visemne.asp?eid="& rsNyeIndlaeg("EID") &"&fid="& rsNyeIndlaeg("FID") &""">"& rsNyeIndlaeg("F_E_EMNE") &"</a><br>"& vbCrLf
        rsNyeIndlaeg.MoveNext
    Loop
    rsNyeIndlaeg.Close : Set rsNyeIndlaeg = Nothing
Else
    Response.Write "                            <center>Der er endnu ikke nogen indlæg i forummet</center>"& vbCrLf
End If
Response.Write "                        </td>"& vbCrLf
Response.Write "                    </tr>"& vbCrLf
Response.Write "                </table>"& vbCrLf

Når jeg skal udskrive det som I kan se, så udskriver jeg f.eks. datoen med F_S_DATO og det går jo ikke, hvis det nu er et emne den skal udskrive, så jeg skal have lavet en SQL eller noget, som kan skille imellem EMNER og SVAR.

På forhånd tak!
Avatar billede erikjacobsen Ekspert
18. december 2002 - 21:29 #1
Men det havde jo været trivielt hvis emner og svar lå i samme tabel,
ikke? De har jo stort set den samme information. Hvem har fundet på
at lave det på den måde?

Men så: træk de 5 øverste ud af emnerne. Find datoen for den ældste af
de 5 emner. Træk derefter så mange ud af svarene som er nyere end denne
dato. Så har du to lister af emner og svar, og kan - med lidt programmering - finde de 5 nyeste.
Avatar billede psyclown Nybegynder
18. december 2002 - 21:37 #2
Det er mig der har fundet på at lave det på den måde eller jeg har er nok ikke den første der har fundet på det, men det er mig der har lavet det forum der.
Jeg kan da godt se at det ville være nemmere at lave det på den anden måde, men hvor sjovt ville det være hvis alt var nemt :)

Nå, men jeg da lige prøve at se om jeg kan finde ud af noget, ud fra dit forslag
Avatar billede psyclown Nybegynder
18. december 2002 - 22:10 #3
kan du ikke forklare det første du skriver der: "Men så: træk de 5 øverste ud af emnerne. Find datoen for den ældste af de 5 emner.". Jeg kan godt finde ud af finde de 5 øverste, men hvordan skal jeg finde den ældste af dem, skal jeg gøre det med noget løkke eller noget ??
Avatar billede erikjacobsen Ekspert
18. december 2002 - 22:17 #4
Mnjah - det var egentlig bare et gratis råd. Jeg får hovedpine
af at skrive ASP/VB kode. Du kan oprette et eller flere arrays
og lægge de 5 ind der. Så må den jo stå i den sidste (der kan
vel være mindre end 5).
Avatar billede _just4fun_ Nybegynder
18. december 2002 - 23:42 #5
Ser for mig ud til at du skal bruge UNION og ROWCOUNT (MsSql-server...)
Eksempel :
SET ROWCOUNT 5;
SELECT felt1 AS f1, felt2 AS f2 FROM Table1
UNION
SELECT feltx AS f1, felty AS f2 FROM Table2
order by f1
Avatar billede psyclown Nybegynder
23. december 2002 - 15:32 #6
Du må undskylde at jeg først svare nu, men mit internet har været nede hele weekenden og jeg har ikke haft andre muligheder til at komme på internettet.

Nu har jeg ikke så meget forstand på MsSQL eller ret og sagt har jeg slet ikke arbejdet med MsSQL før, så har lige et par spørgsmål omkring det.

Nu bruger jeg jo access db, så skal forbindelsen til db'en være en anden eller kan jeg godt bruge den samme, som når jeg bruger SQL ?

Skal jeg bare skrive det op som du har skrevet det der eller hva skal jeg gøre ?
Avatar billede psyclown Nybegynder
26. december 2002 - 13:43 #7
svar
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