Avatar billede mkjaer Nybegynder
05. januar 2004 - 11:00 Der er 5 kommentarer og
1 løsning

Sortering i en MySQL-forespørgsel

Hejsa,

Jeg trækker data fra 2 tabeller i mysql. Første tabel giver mig en kategori, derefter tæller jeg det antal poster i den anden tabel, som matcher kategorien. So far so good.

Men nu ønsker jeg, at få sorteret kategorierne efter antallet af matchende poster i tabel 2, samt at angive hvor mange procent hver enkelt kategori dækker af posterne i tabel 2. Er det helt sort snak?

Håber du kan forstå min udfordring - og muligvis også kan hjælpe med en fornuftig løsning.

PFT,
Martin
Avatar billede hf Nybegynder
05. januar 2004 - 12:10 #1
Jeg ved ikke om du kan gøre det med ét SQL-kald, men her er et forslag med to SQL-kald:

Hent total:
SELECT COUNT([kategori_id])
FROM artikel;

Hent antal poster pr. kategori:
SELECT [kategori_id], COUNT([kategori_id])
FROM artikel
GROUP BY [kategori_id];

Derefter kan du jo nemt beregne den procent-vise fordeling.
Eksemplet bygger på denne struktur:

Tabel1: "kategori"
id
navn

Tabel2: "artikel"
id
overskrift
kategori_id

Hvis det ikke giver mening - eller hvis jeg har misforstået, må du lige vise din tabel-struktur.
Avatar billede mkjaer Nybegynder
05. januar 2004 - 12:51 #2
Fint nok, men jeg ønsker jo at de poster som jeg henter i det 2. sql-kald bliver sorteret i rækkefølge efter COUNT-værdien, á la:

+----------+----------+
| kategori | COUNT(*) |
+----------+----------+
| Rødvin  |      102 |
| Hvidvin  |      50 |
| Rosevin  |      25 |
| Grappa  |      14 |
+----------+----------+

Det er altså rækkefølgende af ovenstående som er afgørende for mig.

Making sense?
Avatar billede hf Nybegynder
05. januar 2004 - 13:07 #3
OK
Sådan:
SELECT kategori_id, COUNT(kategori_id)
FROM artikel
GROUP BY kategori_id
ORDER BY COUNT(kategori_id) DESC;
Avatar billede mkjaer Nybegynder
05. januar 2004 - 13:47 #4
Hejsa,

Lyder rigtigt, men giver følgende fejl:

"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 32"

og min linie 32 ser således ud:

$query = mysql_query("SELECT aargang, COUNT(*) FROM vin GROUP BY aargang ORDER BY COUNT(aargang) DESC");

Hvad mon er galt?
Avatar billede hf Nybegynder
05. januar 2004 - 14:03 #5
Det skyldes forskel på SQL dialekter. Jeg har testet med MS Access, som har en anden dialekt end MySQL.
Prøv dette:
SELECT aargang, COUNT(*) taeller FROM ...
ORDER BY taeller DESC
Så du alias'er COUNT
Avatar billede mkjaer Nybegynder
05. januar 2004 - 14:06 #6
Bingo, 1000x 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
Vi tilbyder markedets bedste kurser inden for webudvikling

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