webForumDet fria alternativet

Group By

5 svar · 213 visningar · startad av oJones

oJonesMedlem sedan dec. 200154 inlägg
#1

Hej!

Har tre stycken tabeller som heter lank, sub och kat.
Försöker räkna ut hur många länkar (lank.lank_namn) det finns där posten har samma sub_id (lank.sub_id).

Använder jag mig av:

Set RecSet = Connect.Execute("SELECT count(lank.lank_id) as antal FROM lank WHERE lank.sub_id = 1")

Så ger den korrekt svar (dvs 2), men såfort jag försöker blanda in de andra tabellerna för att få fram annan information så börjar den plötsligt ge felaktiga svar.

Följande kod:

Set RecSet = Connect.Execute("SELECT kat.*, sub.*, count(lank.lank_id) as antal FROM lank, sub, kat WHERE lank.sub_id = 1 GROUP BY lank.lank_id")

Ger svaret 12.

Jag gissar på att det är min GROUP BY som är fel, men jag har ingen aning om vilket fält den ska grupperas efter. Någon som kan hjälpa mig?

Jag kör OPTION=16384, ASP och Windows.

oJonesMedlem sedan dec. 200154 inlägg
#2

Fick det att fungera med följande kod, men kan någon vara vänlig o förklara vad GRUOP BY är till för och hur det ska användas?

Set RecSet = Connect.Execute("SELECT kat.*, sub.*, count(DISTINCT lank.lank_id) as antal FROM lank, sub, kat WHERE lank.sub_id = 1 GROUP BY lank.sub_id")

[r]
*bah* Fungerar ändå inte när jag försöker köra det med resten av koden.

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Kan du beskriva dina tabeller med lite exempledata och vad du färväntar deig för resultat.

Om du skall lära dig något om group by så skall du absolut inte läsa mysql-dokumentationen.

oJonesMedlem sedan dec. 200154 inlägg
#4

Tabell kat:
kat_id
kat_namn

Tabell sub:
sub_id
kat_id
sub_namn

Tabell lank:
lank_id
sub_id
kat_id
lank_namn

Jag vill räkna ut hur många länkar det finns i var kategori.
Första posten i lank är:
lank_id = 1
sub_id = 1
kat_id = 1
lank_namn = Adam

Andra posten blir således:
lank_id = 2
sub_id = 1
kat_id = 1
lank_namn = Bertil

Jag kan räkna ut hur många det finns i var kategori, men om jag i samma fråga vill plocka fram kat.kat_namn och sub.sub_namn så blir allting galet.

Jag tycker att följande kod borde fungera:

Set RecSet = Connect.Execute("SELECT kat.kat_namn, sub.sub_namn, count(DISTINCT lank.lank_id) as antal FROM kat, sub, lank WHERE lank.sub_id = sub.sub_id GROUP BY lank.lank_id ORDER BY kat.kat_namn, sub.sub_namn, lank.lank_namn ASC")

Men det är tydligen fel.

Ska akta mig för mysql-dokumentationen ;p

oJonesMedlem sedan dec. 200154 inlägg
#5

Ska kanske tillägga att jag loopar igenom alla recset för att få fram information som:

Medier (6 länkar) [kat_namn (antal)]
Tv, tidningar, radio [sub_namn, sub_namn, sub_namn]

LarsGMedlem sedan dec. 200012 464 inlägg
#6

I och med att det finns flera sub_namn i varje kategori så kan du inte få både antalet länkar och namnen i en fråga (i varje fall inte i Mysql.)

Det blir nog enklast att hämta allting till klienten mha getrows och göra summeringarna där.

Varför har du med kolumnen kat_id i tabellen lank?

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)