Gå til innhold

Spørring i MySQL


Anbefalte innlegg

Skrevet

SELECT a.ArrID, SUM(b.AntBill) AS sumBestillt 
FROM Arrangement a, Bestilling b 
WHERE b.ArrID = a.ArrID  GROUP BY a.Tid;

 

Her prøver jeg å krysse to tabeller og setter krav på at det skal summeres på antall bestillinger der ArrID er lik på begge tabellene.

Men når jeg ikke har noen bestillinger så vil jeg at den skal returnere en sum på 0, noe som den ikke gjør og jeg får ut ingenting.

Hvordan kan jeg få dette til?

Videoannonse
Annonse
Skrevet

Du burde kanskje bygge opp spørringen med LEFT JOIN eller bruke JOIN og ON slik at den ser bedre ut.

 

Du bruker f.eks. bruke CASE for å returnere 0 dersom den ikke har noen verdi.

Skrevet (endret)

SELECT felt1, CASE felt2 WHEN '' THEN '0' ELSE felt2 END FROM tabell.

 

Eller du kan bruke if:

 

SELECT felt1, if(felt2 = '', '0', felt2) FROM tabell

men da er det lurt å legge til AS og gi den et navn.

 

Fordelen med CASE er at den bytter ut verdien som vises slik at du bruker resultatet akuratt som vanlig, den bytter bare ut '' med '0'. Du slipper f.eks. å gi den et navn.

Endret av ????????
Skrevet

SELECT a.ArrID, IF(SUM(b.AntBill)='','0',SUM(b.AntBill)) AS sumBestillt 
FROM Arrangement a, Bestilling b 
WHERE b.ArrID = a.ArrID  
GROUP BY a.Tid;

 

Slik har den blitt, men den skriver bare ut de som jeg har bestilling på.

Ser du noen som helst løsning?

Skrevet

Når du sier "skriver bare ut de som jeg har bestilling på" er det ikke lett å forstå når vi ikke vet hvordan tabellene dine ser ut ;)

 

Kommer det fortsatt ikke 0 der den ikke har noen verdi?

eller er problemet at de feltene ikke blir med i det hele tatt?

 

I så fall burde du kikke litt på, som jeg nevnte tidligere, metoden du joiner med. Bruk f.eks. LEFT JOIN hvis det er mulig,

Skrevet

Litt flaut men side du hadde så peiling så tar jeg meg den frihet å spørre igjen :)

 

IF(SUM(b.AntBill)='NULL','0',SUM(b.AntBill)) AS sumBestillt
IF(SUM(b.AntBill)='','0',SUM(b.AntBill)) AS sumBestillt

Ingen av disse typene vil gi sumBestillt verdien 0, den får bare verdien NULL.

 

Har du noe forslag?

Skrevet (endret)

Problemet er at jeg har prøvd begge deler... ingen av dem fungerte.

 

IF(SUM(b.AntBill)='','0',SUM(b.AntBill)) AS sumBestillt

Det var denne som ikke ville fungere slik som jeg trodde.

Endret av jtsorensen
Skrevet (endret)

Du har rett, NULL er et eget lite tema innen SQL - ta en kikk i manualen så finner du litt info om det.

Du kan f.eks. bruke funksjonen ISNULL()

 

EDIT:

glem ikke at du kan bruke PHP til dette også.

Endret av ????????

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...