Avatar billede Peer Novice
25. juni 2026 - 22:20 Der er 8 kommentarer og
1 løsning

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
28. juni 2026 - 20:15 #6
Jeg har brugt andre feltnavne og tabel navn end dig.

:-)
Avatar billede arne_v Ekspert
28. juni 2026 - 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
28. juni 2026 - 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 Peer Novice
29. juni 2026 - 21:55 #9
Tak, tak, tak Arne - du er fantastisk.
Hvor svært ka det være, lidt IF THEN. HVIS navnene er forskellige, OG lykken finder flere ens numre (BilledeA) som er ens, så bon ud med de pågældende dubletter, - men nej, så ligetil var det alligevel ikke. Og der findes åbenbart ikke en funktion der lister dubletter, kun en der kan fjerne dem!!!
Troede efterhånden ikke det skulle lykkes, men du kom med en brugbar løsning, som jeg aldrig selv havde kunne sammensætte.
Satte ORDER BY BilledeA ;” til sidst i SQL sætningen, så de listes fra lav til høj.
Endnu engang TAK.
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