|
| MySQL og group by Fra : Thygesen |
Dato : 01-10-02 19:00 |
|
Jeg har tidligere brugt følgende til udskrivning af data fra Access
database, men det virker åbenbart ikke med MySQL:
"SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE user = '" &
session("stat_username") & "' GROUP BY BROWSER ORDER BY count(BROWSER)
desc,BROWSER"
Den kommer med følgende fejlmeddelelse:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[TCX][MyODBC]Invalid use of group function
Findes der en tilsvarende kommando til MySQL eller er der nogen der har en
smart måde at det til at virke med MySQL på?
Mvh. Christoffer Thygesen
| |
Jesper Stocholm (01-10-2002)
| Kommentar Fra : Jesper Stocholm |
Dato : 01-10-02 21:48 |
|
Thygesen wrote :
> Jeg har tidligere brugt følgende til udskrivning af data fra Access
> database, men det virker åbenbart ikke med MySQL:
>
> "SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE user =
> '" & session("stat_username") & "' GROUP BY BROWSER ORDER BY
> count(BROWSER) desc,BROWSER"
Hvad er den "resulterende" SQL-statement ? Prøv at skrive den ud inden
afvikling imod databasen og fortæl, hvad der står.
> Den kommer med følgende fejlmeddelelse:
>
> Microsoft OLE DB Provider for ODBC Drivers error '80004005'
>
> [TCX][MyODBC]Invalid use of group function
>
> Findes der en tilsvarende kommando til MySQL eller er der nogen der
> har en smart måde at det til at virke med MySQL på?
Jeg vil foreslå dig, at du spørger i dk.edb.database. Dit spørgsmål er
specifikt om anvendelse af mySQL og dennes SQL-syntaks, så dit spørgsmål
er "mere" on-topic dér end her.
xFUT: dk.edb.database
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|
| |
Thygesen (02-10-2002)
| Kommentar Fra : Thygesen |
Dato : 02-10-02 21:23 |
|
> Hvad er den "resulterende" SQL-statement ? Prøv at skrive den ud inden
> afvikling imod databasen og fortæl, hvad der står.
Jeg er ikke helt sikker på hvad du mener med den "resulterende"
SQL-statement.
Jeg kan fortælle at det den skal gøre er at fortælle hvor mange rækker der
indeholder det samme og helt også ordnet efter antal.
Hvis vi f.eks. har rækker der indeholder følgende:
a
c
a
b
a
Så skulle det gerne udskrives således:
3 a
1 b
1 c
Mvh. Christoffer Thygesen
| |
Kristian Damm Jensen (03-10-2002)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 03-10-02 10:38 |
|
Thygesen wrote:
>
> > Hvad er den "resulterende" SQL-statement ? Prøv at skrive den ud inden
> > afvikling imod databasen og fortæl, hvad der står.
>
> Jeg er ikke helt sikker på hvad du mener med den "resulterende"
> SQL-statement.
Hvad du gør her, er at sætte en tekststreng sammen. Denne tekststreng
indeholder en sql-forespørgsel. Vi vil gerne se forespørgslen, ikke de
strengoperationer, der sætter den sammen.
Jeg kan ikke umiddelbart se noget galt med din forespørgsel, bortset fra
jeg ville forvente at du skulle bruge "Antal" frem for "count(browser)"
i din order by. Men jeg kan ikke se noget galt med din group by.
Vent lidt... jeg har ikke lige adgang til en sql-server, men du kunne
forsøge at erstatte count(browser) med count(*). Det burde give samme
resultat.
<snip>
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.
| |
Thygesen (05-10-2002)
| Kommentar Fra : Thygesen |
Dato : 05-10-02 20:13 |
|
> Hvad du gør her, er at sætte en tekststreng sammen. Denne tekststreng
> indeholder en sql-forespørgsel. Vi vil gerne se forespørgslen, ikke de
> strengoperationer, der sætter den sammen.
> .....
>
ok, her er den som den ser ud inden afvikling imod databasen:
"SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE GROUP BY
BROWSER ORDER BY count(BROWSER) desc,BROWSER"
Jeg tror ikke at det er count der giver problemet, jeg tror at det er GROUP
der understøttes af Access og ikke MySQL. Derfor ville jeg høre om der
findes en måde at nå frem til samme resultat.
Jeg har tænkt på bare at bruge count og så sortere resultatet ved at gemme
det i et array og sortere dette.
Mvh. Christoffer Thygesen
http://CHT.dk
| |
Peter Brodersen (05-10-2002)
| Kommentar Fra : Peter Brodersen |
Dato : 05-10-02 20:38 |
|
On Sat, 5 Oct 2002 21:12:59 +0200, "Thygesen" <cht@cht.dk> wrote:
>"SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE GROUP BY
>BROWSER ORDER BY count(BROWSER) desc,BROWSER"
Du må ikke have COUNT() med i din ORDER BY... brug i stedet
kolonnenummeret eller dit alias. Og fjern din tomme WHERE. Fx:
SELECT BROWSER, COUNT(BROWSER) AS antal FROM statistics GROUP BY
BROWSER ORDER BY 1 DESC, BROWSER
eller
SELECT BROWSER, COUNT(BROWSER) AS antal FROM statistics GROUP BY
BROWSER ORDER BY antal DESC, BROWSER
Det virker glimrende.
--
- Peter Brodersen
| |
Thygesen (07-10-2002)
| Kommentar Fra : Thygesen |
Dato : 07-10-02 07:28 |
|
> >"SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE GROUP BY
> >BROWSER ORDER BY count(BROWSER) desc,BROWSER"
>
> Du må ikke have COUNT() med i din ORDER BY... brug i stedet
> kolonnenummeret eller dit alias. Og fjern din tomme WHERE. Fx:
>
> SELECT BROWSER, COUNT(BROWSER) AS antal FROM statistics GROUP BY
> BROWSER ORDER BY 1 DESC, BROWSER
>
> eller
>
> SELECT BROWSER, COUNT(BROWSER) AS antal FROM statistics GROUP BY
> BROWSER ORDER BY antal DESC, BROWSER
Mange tak, det virker perfekt.
Den WHERE i min sætning, var selvfølgelig en fejl, den havde jeg lige glemt
at fjerne.
Mvh. Christoffer Thygesen
| |
Nis Jørgensen (07-10-2002)
| Kommentar Fra : Nis Jørgensen |
Dato : 07-10-02 11:52 |
|
On Sat, 05 Oct 2002 21:37:56 +0200, Peter Brodersen <usenet@ter.dk>
wrote:
>On Sat, 5 Oct 2002 21:12:59 +0200, "Thygesen" <cht@cht.dk> wrote:
>
>>"SELECT BROWSER,count(BROWSER) AS antal FROM statistics WHERE GROUP BY
>>BROWSER ORDER BY count(BROWSER) desc,BROWSER"
>
>Du må ikke have COUNT() med i din ORDER BY... brug i stedet
>kolonnenummeret eller dit alias. Og fjern din tomme WHERE. Fx:
Bemærk at "du må ikke" kun gælder for mySQL. Ifølge SQL92-standarden
må man tværtimod ikke bruge aliaser i ORDER BY (og ikke mindst GROUP
BY), og kolonnenumre er "deprecated".
Jeg kan vagt se, hvilke problemer man forsøger at undgå ved at forbyde
aliaserne. Hvad betyder fx dette:
SELECT b AS c, Count(a) AS b
FROM myTable
GROUP BY b
ORDER BY b
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
|
|