25. februar 2012 - 15:47Der 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..
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
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å.
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);
Kik engang, #1 er et svar. Her opretter jeg et mere.
Synes godt om
Ny brugerNybegynder
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.