Avatar billede eksperten1 Nybegynder
29. januar 2001 - 11:31 Der er 12 kommentarer og
1 løsning

SQL med count

På en side viser jeg alle records med et givent ID.
SQL = \"SELECT * FROM sider WHERE campaignID = \" & request(\"id\") & \";\"

Herefter bruger jeg
Do while not rs.eof
<- kode her ->
rs.movenext
loop

Inde i denne loop, for hver enkelt record, har jeg en funktion som laver et nyt opslag med følgende sætning:
SQL = \"SELECT COUNT(*) AS ANTAL FROM kampagnelinjer WHERE kampagnesideid = \" & ID & \";\"

Men det er jo en latterlig metode... Kan jeg ikke i en og samme SQL statement hente antallet af records i en anden tabel med samme ID som den pågældende record i tabellen \'sider\'.??

mvh,
Mark
Avatar billede sone Nybegynder
29. januar 2001 - 11:36 #1
Jo - brug GROUP BY

SELECT COUNT(*), kampagnesideid FROM kampagnelinjer GROUP BY kampagnesideid
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 11:40 #2
Øhh ?
Hvordan skal jeg bruge denne ?

Hvordan skal hele SQL sætningen så se ud ? Jeg ville jo gerne undgå at lave mere end 1 forbindelse til db.!
Jeg paster lige en stump kode ind fra siden.

pft
Mark
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 11:41 #3
<%
Set rs = Server.CreateObject(\"ADODB.Recordset\")
SQL = \"SELECT * FROM sider WHERE campaignID = \'\" & request(\"id\") & \"\';\"
rs.open sql, strConnect
Do while not rs.eof
%>
        <tr bgcolor=\"white\">
            <td width=\"16\"><a href=\"rediger_side.asp?id=<%= rs(\"id\")%>&campaignID=<%= request(\"id\")%>\" Title=\"Tryk for at redigere siden\"><img src=\"images/edit.gif\" border=\"0\"></td>
            <td width=\"25\" align=\"center\"><font size=\"-2\" color=\"black\"><%=rs(\"sidenr\")%></font></td>       
            <td width=\"100\"><font size=\"-2\" color=\"black\"><%= antalprodukter(rs(\"id\"))%></font></td>       
            <td align=\"right\"><font size=\"-2\" color=\"black\"><%= DKDato(rs(\"dato\"),\"#11\")%></font></td>
        </tr>
<%
rs.movenext
loop
rs.close
set rs = Nothing
%>
    </table>
    </td></tr></table>
<!-- End Context -->
    </td></tr>       
</table>
</body>
</html>
<%
function antalprodukter(ID)
set objrs = Server.CreateObject(\"ADODB.Recordset\")
sql = \"SELECT COUNT(*) AS ANTAL FROM kampagnelinjer WHERE kampagnesideid = \" & ID & \";\"
objrs.open sql, strConnect
Response.write objrs(\"ANTAL\")

objrs.close
set objrs = Nothing
end function
%>
Avatar billede sone Nybegynder
29. januar 2001 - 11:44 #4
Du laver ét SQL-kald (GROUP BY) inden du starter på din normale WHILE (husk at bruge noget andet en RS - f.eks. rs2).
I antalprodukter kan du så fiske tal ud fra rs2 - frem for at lave et SQL-kald.
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 12:53 #5
Hvordan lige det, jeg må indrømme at jeg er stået komplet af. Jeg forstår simpelthen ikke hvordan jeg gør dette \'fiske tal ud\' fra rs2. Og hvorfor skal den hedde rs2 istedet for rs, ændrer det noget ?!

mvh-Mark
Avatar billede sone Nybegynder
29. januar 2001 - 12:56 #6
Fordi... du skal have 2 x rs i spil samtidig!

rs til din normale WHILE, og en rs2 hvor du henter dit antal ud af.
Prøv at køre
  SELECT COUNT(*), kampagnesideid FROM kampagnelinjer GROUP BY kampagnesideid
i Access (ell. lign.) så kan du måske se trikset.
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 13:01 #7
OK, så min rs2 bruges alene til at hente count ud fra. Skal jeg så bruge et filter eller hur, skal jeg bare \'rs2.movenext\' og hvad hedder den værdi jeg skal hente ?
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 13:01 #8
AHH, der gik lige et klart lys op for mig.

Jeg takker og bukker og skraber

Mark
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 13:09 #9
Jeg kan bare ikke få det til at spille. :-((

Hvordan skal jeg stykke det sammen, jeg lavede en rs2 med din \'SELECT COUNT(*), kampagnesideid FROM kampagnelinjer GROUP BY kampagnesideid\'. Men hvordan trækker jeg selve count\'et ud ?? Jeg skal jo vise det antal i min tabel !!

mvh,
Mark
Avatar billede sone Nybegynder
29. januar 2001 - 13:15 #10
Som normalt: rs2(0) eller rs2(\"antal\") hvid du tilføjer en AS antal.

Du skal så lave en enkelt IF som matcher id i rs med id i rs2.
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 13:18 #11
Nu bliver jeg jo pisseforvirret, hvordan skal jeg så teste på ex. 90 forskellige ID\'s, skal jeg så loope igenne disse eller kan jeg køre et filter på det eller hur?

Tak for hjælpen BTW
MArk
Avatar billede sone Nybegynder
29. januar 2001 - 13:23 #12
Du har 2 rækker med id\'ere som du skal have til at passe sammen:

1 - 1
2 - 2
4 - 3
5 - 4

Hvis ikke de 2 id\'er passer sammen, så skal du spole den ene en ekstra tak frem.

En anden mulighed er, at lægge alt fra rs2 ind i et Array, som du så bare kan aflæse i din WHILE.
Avatar billede eksperten1 Nybegynder
29. januar 2001 - 13:51 #13
Ja det er jo temmelig pinligt, men jeg fatter stadig ikke en brik af hvordan det skal skrues sammen. Er det ikke muligt at lave noget ala en INNER JOIN hvor man får det count ud i rs(\"antal\")??
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