/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
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

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste