Avatar billede kasbas91 Nybegynder
25. februar 2012 - 15:47 Der er 4 kommentarer og
2 løsninger

Er i gang med et forum.. Men er stødt på et sql problem ?

Er i gang med et forum.. Men er stødt på et sql problem ?

SELECT kategorier.kat_id, kategorier.name, SUM(spoergsmaal.points) as points
FROM kategorier
INNER JOIN spoergsmaal
ON (kategorier.kat_id = spoergsmaal.kat_id)
WHERE kategorier.active = 1

Her finder den resultaterne som matcher med id'erne, det er også

rigtig nok..

Men udover det, vil jeg også gerne have at den også udskrive de andre resultater som kan findes i kategorier selv om, de ikke passer med id'erne i spoergsmaal tabellen.

Nu ser query resultatet ud således:

kat_id  name  points
1      php  240

Men jeg vil gerne have den ser således ud:

kat_id  name  points
1      php  240
2      mysql 0
3      html  0
4      xml  0
5      json  0

osv..

Håber i forstår mig :) Ellers skriv så skal jeg prøve at forklare det bedre..
25. februar 2012 - 16:08 #1
Jeg forsøger at omformulere problemet, så kan du fortælle mig, om jeg gættede forkert.  Problemet er, at du kun for vist kategorier der har points.  Du vil også have vist kategorier der ikke har points.

I så fald skal du udskifte INNER JOIN til LEFT JOIN, således:

SELECT kategorier.kat_id, kategorier.name, SUM(spoergsmaal.points) as points
FROM kategorier
LEFT JOIN spoergsmaal
ON (kategorier.kat_id = spoergsmaal.kat_id)
WHERE kategorier.active = 1
Avatar billede kasbas91 Nybegynder
25. februar 2012 - 20:09 #2
Jeg har prøvet med left join også.  Og det virker heller ikke. :) men hvis jeg fjerner sum så bliver det hele vist. Men det er jo sum jeg skal bruge.  Så jeg ved ikke helt hvad jeg skal finde på.
25. februar 2012 - 21:01 #3
Du skal nok have tilføjet GROUP BY kategorier.kat_id.

Nu ved jeg ikke hvordan dine tabeller er opbygget, men jeg for test to tabeller kasbas_kategori og kasbas_spørgsmål, og jeg fyldte nogle data i som vist nedenfor.  Jeg lavede tre kategorier, hvoraf kategori 2 ikke havde nogen points og kategori 3 ikke var active = 1.  Med denne forespørgsel:

SELECT k.kat_id, k.name, SUM(s.points) as points
FROM kasbas_kategori k
LEFT JOIN kasbas_spørgsmål s
ON (k.kat_id = s.kat_id)
WHERE k.active = 1
GROUP BY k.kat_id

fik jeg dette resultat:

kat_id name point
1        name1      100
2        name2      NULL

her er tabellerne og indholdet:

CREATE TABLE kasbas_kategori(kat_id INT, name VARCHAR(10), active BOOL);

INSERT INTO kasbas_kategori VALUES(1, 'name1', 1);
INSERT INTO kasbas_kategori VALUES(2, 'name2', 1);
INSERT INTO kasbas_kategori VALUES(3, 'name3', 0);

CREATE TABLE kasbas_spørgsmål(id INT, kat_id INT, points INT);

INSERT INTO kasbas_spørgsmål VALUES(1, 1, 10);
INSERT INTO kasbas_spørgsmål VALUES(2, 1, 20);
INSERT INTO kasbas_spørgsmål VALUES(3, 1, 30);
INSERT INTO kasbas_spørgsmål VALUES(4, 1, 40);
INSERT INTO kasbas_spørgsmål VALUES(5, 3, 50);
INSERT INTO kasbas_spørgsmål VALUES(6, 3, 60);
Avatar billede kasbas91 Nybegynder
25. februar 2012 - 21:02 #4
Okay det vil jeg prøve når jeg når jeg kommer hjem. Det havde jeg ikke tænkt på overhovedet. :)
Avatar billede kasbas91 Nybegynder
26. februar 2012 - 01:29 #5
Hej Christian_Belgien.

Smid et svar, tak for hjælpen, det virkede.. med group by..
26. februar 2012 - 06:17 #6
Kik engang, #1 er et svar.  Her opretter jeg et mere.
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