Avatar billede Peer Novice
25. juni 2026 - 22:20 Der er 8 kommentarer

Jeg bakser med noget Database og If Then med ASP - hvad gør jeg galt?

Er i gang med et billedarkiv, hvor der kan stemmes på et given billede, og så skal den bonne ud med et YES i tabellen hvis 2 eller flere stemmer på det samme billede, som de syntes bedst om. f.eks.:
Egon : billede nr 23        YES
Keld : billede nr 212
Benny:billede nr 23        YES
OSV.
Har efterhånden afprøvet adskillige kombinationer, og enten bonner den ud med et YES på samtlige, eller absolut ingen match, - er jeg helt skæv på den med at Navn skal være forskellige fra de andre Navn OG BilledeA skal være lig med de øvrige BilledeA i DB/tabellen?
Indstillinger i DB. Navn=Char BilledeA + B = TINYINT og også afprøvent med INT
Koder er flg:
<%
      strSQL = "SELECT * FROM afstemning ORDER BY ID DESC;" 
   
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open tempConn
    Set rs = myConn.Execute(strSQL)
  If Not (rs.BOF Or rs.EOF) Then

        %>

<table id="vis" style="opacity:1;" width="100%">
<tr>
  <th>Fornavn</th>
  <th>Bedste billede</th>
  <th>N&aeligstbedste</th>
  <th>Match</th>
</tr>

<%
    Do While Not rs.EOF
'Har prøvet denne kombination + adskillige andre uden held - If (rs("Navn")) <> ""  and (rs("BilledeA")) = (rs("BilledeA"))  = "" then

If (rs("Navn")) <> (rs("Navn")) AND (rs("BilledeA")) = (rs("BilledeA")) then
Response.Write "<tr><td>" & (rs("Navn")) & "</td><td>" & (rs("BilledeA")) & "</td><td>" & (rs("BilledeB")) & "</td><td>" & "YES" & "</td></tr>"
    Else
Response.Write "<tr><td>" & (rs("Navn")) & "</td><td>" & (rs("BilledeA")) & "</td><td>" & (rs("BilledeB")) & "</td><td>" & "</td></tr>"   
    End If
    rs.MoveNext
  Loop
%>

</table>

<%
        rs.close
    myConn.Close
      set rs=Nothing
    Set myConn = Nothing 
End If
%>
Avatar billede arne_v Ekspert
26. juni 2026 - 01:28 #1
Jeg forstår ikke hvad det er du prøver på.

Din SQL:

SELECT * FROM afstemning ORDER BY ID DESC

laver ingen sammentællling, så hvordan vil du finde dem med mere end to stemmer??

Din IF ser mystisk ud.

(rs("Navn")) <> (rs("Navn"))

er altid falsk.

(rs("BilledeA")) = (rs("BilledeA"))

er altid sand.
Avatar billede Peer Novice
26. juni 2026 - 11:29 #2
Hej Arne
Grunden til at jeg valgte ORDER BY ID DESC så ville den liste alle poster ud, og udvælgelsen skulle så ske i If THEN sætningen
jeg syntes efterhånden jeg har afprøvet samtlige kombinationer, også inden for diverse SQL muligheder
strSQL = "SELECT * FROM afstemning WHERE Navn <> ' '  ;"
strSQL = "SELECT * FROM afstemning WHERE Navn <> Navn and BilledeA = BilledeA ;" (Mest oplagt)
strSQL = "SELECT * FROM afstemning WHERE BilledeA <> BilledeA

Men der hvor jeg tror at den er gal, er f.eks.
WHERE Navn <> ' '
Skriver jeg Egon i  enkelt anførselstegnet, så bonner den ud med Egon, men hvordan definerer jeg så, at Navn SKAL være forskelligt fra Navn?
Og den mest oplagte ville være strSQL = "SELECT * FROM afstemning WHERE Navn <> Navn and BilledeA = BilledeA ;" MEN igen, hvordan definerer jeg at Navn skal være forskellig fra navn OG BilledeA skal være lig med BilledeA når jeg ikke bare kan skrive som ovenstående, men at det skal være =' ' Jeg kan jo ikke bare skrive Navn <> Navn eller  Navn <> 'Navn'
Blev min problemstilling lidt mere tydeligt?
Avatar billede arne_v Ekspert
26. juni 2026 - 14:40 #3
WHERE xxxxx

betyder "tag kun de enkelt rækker hvor betingelsen xxxxx er opfyld (for den række)".

Navn <> Navn er aldrig tilfældet for en enkelt række.

Du skal have noget fundamentalt anderledes SQL.
Avatar billede arne_v Ekspert
26. juni 2026 - 14:40 #4
Et forsøg:


mysql> SELECT name,picid FROM votes;
+-------+-------+
| name  | picid |
+-------+-------+
| Egon  |    23 |
| Keld  |  212 |
| Benny |    23 |
+-------+-------+
3 rows in set (0.00 sec)

mysql> SELECT name,picid,(SELECT COUNT(*) FROM votes v2 WHERE v1.picid=v2.picid) totvot FROM votes v1;
+-------+-------+--------+
| name  | picid | totvot |
+-------+-------+--------+
| Egon  |    23 |      2 |
| Keld  |  212 |      1 |
| Benny |    23 |      2 |
+-------+-------+--------+
3 rows in set (0.01 sec)
Avatar billede Peer Novice
27. juni 2026 - 22:41 #5
Hej Arne
Æv, har gået hele dagen og afventet en mail om at der var et nyt svar, men den funktion må jeg åbenbart have slået fra.
Jeg syntes dine koder ser lidt mærkelige ud, så jeg har ”omskrevet” dem, som jeg tror at de skulle se ud strSQL = "SELECT Name,BilledeA,(SELECT COUNT(*) FROM afstemning Antal2 WHERE Antal=Antal) totvot FROM Antal;"
men alligevel er der noget jeg er i tvivl med, bl.a. mysql>,  samt v1.picid=v2.picid) totvot FROM votes v1; (Skal der laves en ny tabel ell. Felt ?)
Avatar billede arne_v Ekspert
Skrevet i går kl. 20:15 #6
Jeg har brugt andre feltnavne og tabel navn end dig.

:-)
Avatar billede arne_v Ekspert
Skrevet i går kl. 20:19 #7
Med dine navne skal det nok være:

SELECT navn,billeda,(SELECT COUNT(*) FROM afstemning a2 WHERE a1.billeda=a2.billeda) stemmer FROM afstemning a1
Avatar billede arne_v Ekspert
Skrevet i går kl. 20:21 #8
Pointen er at en normal SELECT FROM kun kigger på en række af gangen.

For at kunne tælle antal stemmer bruger vi afstemning tabellen 2 gange - med alias a1 og a2.
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