Avatar billede ameq Nybegynder
01. oktober 2002 - 11:51 Der er 18 kommentarer og
2 løsninger

Virker på Microsoft Access ikke på MYSQL

strSQL = "select PizzaID, count('PizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
set rs = Conn.Execute(strSQL)
response.Write(rs("PizzaID"))

laver den her fejl

Microsoft OLE DB Provider for ODBC Drivers error '80020009'

[Microsoft][ODBC Driver Manager] Driver does not support this parameter
Avatar billede keysersoze Ekspert
01. oktober 2002 - 11:56 #1
så vidt jeg husker kan du i mysql ikke både lave en count og en udvælgelse - det skal (er jeg næsten sikker på) laves vha to select's
Avatar billede lasse_buck Nybegynder
01. oktober 2002 - 12:06 #2
Man kan godt bruge count(*) sammen med group by, da det jo er en funktion, som virker på flere rækker.

Brug:
strSQL = "select PizzaID, count(*) AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Avatar billede coltau Juniormester
01. oktober 2002 - 13:34 #3
Hva med plingerne - de skal ikke være der i count().

strSQL = "select PizzaID, count(PizzaID) AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Avatar billede ameq Nybegynder
01. oktober 2002 - 13:41 #4
lasse_buck -> vil den tag alle min rs, jeg skal have lavet en top 5 ud fra den table...

coltau -> Sorry det var også kode fra mit Microsoft Access =) sad bare og legede med den =)
Avatar billede lasse_buck Nybegynder
01. oktober 2002 - 13:53 #5
ameq >> Jeg bliver i tvivl om du har styr på GROUP BY.
select PizzaID, count(*) AS antal From orderlist where OrderStatus = '1' group by PizzaID;
Bemærk jeg har ændret navnet til antal. Denne select udvælger ALLE forskellige PizzaID og viser, antallet af gange de forekommer.
f.eks.
PizzaID    antal
1          4
2          7
3          2
4          9

Hvis du kun vil have de 5 højeste forekommende:
select PizzaID, count(*) AS antal From orderlist where OrderStatus = '1' group by PizzaID ORDER BY antal DESC LIMIT 5;

Du skal så efterfølgende løbe igennem din rs for at få de forskellige resultater.
Avatar billede ameq Nybegynder
01. oktober 2002 - 22:49 #6
ja det er noget i den stil hvis du så kan sætte den til at udskrive den stort "den med flest" først?
Avatar billede ameq Nybegynder
01. oktober 2002 - 22:59 #7
men kan du ikke skrive hele sql sættingen for mig?
Avatar billede lasse_buck Nybegynder
02. oktober 2002 - 11:46 #8
ameq >> "sætte den til at udskrive den stort", skriver du. Jeg fatter ikke, hvad du mener med det.

Jeg allerede skrevet sql sætningen en gang:
strSQL = "select PizzaID, count(*) AS antal From orderlist where OrderStatus = '1' group by PizzaID ORDER BY antal DESC LIMIT 5"

Er du klar over, at du skal gennemløbe dit resultatsæt for at få alle 5 værdier?:
Set rs = Conn.Execute(strSQL)

' Gennemløb Recordset (rs) med en løkke
Do
  response.Write rs("PizzaID") & ": antal=" & rs("antal") & "<br>"
  rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF

(Jeg kender ikke php, så jeg håber mit eksempel er korrekt).
Avatar billede ameq Nybegynder
02. oktober 2002 - 13:18 #9
strSQL = "select PizzaID, count(*) AS antal From orderlist where OrderStatus = '1' group by PizzaID ORDER BY antal DESC LIMIT 5"
Set rs = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
  Response.Write(rs("antal"))
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF

laver den her fejl

Microsoft OLE DB Provider for ODBC Drivers error '80020009'

[Microsoft][ODBC Driver Manager] Driver does not support this parameter

/1.asp, line 0
Avatar billede ameq Nybegynder
03. oktober 2002 - 23:05 #10
??
Avatar billede keysersoze Ekspert
03. oktober 2002 - 23:13 #11
som sagt - jeg mener ikke at mysql kan lave både en count og en almindelige select i samme sætning... prøv disse to hver for sig og se om der sker fejl der;

strSQL = "select PizzaID From orderlist where OrderStatus = '1' group by PizzaID"

strSQL = "select count('PizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Avatar billede ameq Nybegynder
10. oktober 2002 - 23:32 #12
okey jeg har fået den sidste line til at virke, men hvordan får jeg skrivet mit rs fra kolennen ID ud?

sorry jeg ikke har skrivet før nu =)
Avatar billede keysersoze Ekspert
10. oktober 2002 - 23:37 #13
huh?
Avatar billede ameq Nybegynder
11. oktober 2002 - 08:02 #14
nej jeg kan vi have skrivet iden ud af det rs jeg laver for at finde den der er flest af
Avatar billede keysersoze Ekspert
11. oktober 2002 - 10:18 #15
det var endnu mere kryptisk!
Avatar billede ameq Nybegynder
11. oktober 2002 - 13:14 #16
he he sorry =) jeg ved ikke lige hvordan jeg skal skrive det men det jeg skal bruge er konollen "pizzaID" for dem der er der flest gang i konollen "pizzaID"
sorry hvis jeg skriver noget "lort" før =)
men som lasse_buck ´skriv =)

PizzaID    antal
1          4
2          7
3          2
4          9

for når jeg udskriver den her
<%
strSQL = "select count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Set rs = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
  Response.Write(rs("pizzatop5") & "<br>")
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF
%>
får jeg den her
38
14
9
2
1
4
1
8
2
2
2
2
1
1
2
og det tror jeg nu ikke er rigtig
Avatar billede lasse_buck Nybegynder
11. oktober 2002 - 14:43 #17
Vi prøver med lidt trinvis fejlsøgning.
Denne her har du selv kørt uden fejl. Vi kalder den (1):
<%
strSQL = "select count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Set rs = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
  Response.Write(rs("pizzatop5") & "<br>")
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF
%>

Afprøv så (2):
<%
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID"
Set rs = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
  Response.Write(rs("PizzaID") & ", " & rs("pizzatop5") & "<br>")
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF
%>

Virker det?

Hvis ja, så prøv nr (3):
<%
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID" ORDER BY antal DESC
Set rs = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
  Response.Write(rs("PizzaID") & ", " & rs("pizzatop5") & "<br>")
rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not rs.EOF
%>

Hvis (3) virker så prøv med (4):
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID" ORDER BY antal DESC LIMIT 5

(5):
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID" ORDER BY antal DESC LIMIT 0,5
Avatar billede ameq Nybegynder
12. oktober 2002 - 10:24 #18
nr 1) får jeg
38
14
9
2
1
4
1
8
2
2
2
2
1
1
2

nr 2) får jeg
1, 38
2, 14
4, 9
5, 2
6, 1
7, 4
8, 1
9, 8
11, 2
12, 2
13, 2
76, 2
79, 1
84, 1
85, 2

3) får jeg den her fejl
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID" ORDER BY antal DESC
-----------------------------------------------------------------------------------------------------------------^
men flyttede den sidste " ned bare DESC, så får jeg bare den her fejl =)

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[TCX][MyODBC]Unknown column 'antal' in 'order clause'

/1.asp, line 4

men det er da en kanon i iden med trinvis =)
Avatar billede ameq Nybegynder
12. oktober 2002 - 10:32 #19
<%
strSQL = "select pizzaID, count('pizzaID') AS pizzatop5 From orderlist where OrderStatus = '1' group by PizzaID ORDER BY pizzatop5 DESC LIMIT 0,5"
Set top5 = Conn.Execute(strSQL)
' Gennemløb Recordset (rs) med en løkke
Do
strSQL = "select * from pizzalisten where id = " & top5("pizzaID")
set pizzalisten = Conn.Execute(strSQL)
  Response.Write("Navn : " & pizzalisten("name") & " - Antal : " & top5("pizzatop5") & "<br>")
top5.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop While Not top5.EOF
%>
DET VIRKER =) + jeg syns i har været så god så i skal have flere point
Avatar billede lasse_buck Nybegynder
14. oktober 2002 - 09:40 #20
hehe - der er ikke noget at sige til, at du fik fejl på 'order by antal', når jeg havde kaldt feltet pizzatop5 :o)

Det burde ikke gøre nogen forskel, om du skriver count('pizzaID'), count(pizzaID) eller count(*). Count tæller rækker - ikke felter.

Lækkert at du fik det til at virke - tak for point!
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