Avatar billede mkjaer Nybegynder
22. januar 2007 - 22:41 Der er 22 kommentarer og
1 løsning

Hvordan fjerner jeg poster hvor count = 0

hejsa,

Jeg vil gerne ændre denne query, så den ikke medtager poster, hvor 'antal' = 0:

SELECT indhold.id, indhold.overskrift, count(indhold_menupunkter.id) as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.status=1 GROUP BY indhold.id

How to?

Hilsen
Martin
Avatar billede jokkejensen Novice
22. januar 2007 - 22:45 #1
'antal' != 1

!= betyder "not ="
Avatar billede kalp Novice
22. januar 2007 - 22:46 #2
'antal' <> 0
Avatar billede jokkejensen Novice
22. januar 2007 - 22:47 #3
du kan måske også bruge

'antal' <> 0;

Men

SELECT indhold.id, indhold.overskrift, count(indhold_menupunkter.id) as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.status=1 and 'antal' != 0 GROUP BY indhold.id
Avatar billede jokkejensen Novice
22. januar 2007 - 22:47 #4
nå det var ikke lige for at lyde som en papegøje kalp :)
Avatar billede kalp Novice
22. januar 2007 - 22:49 #5
hæ hæ fair nok:-)
Avatar billede mkjaer Nybegynder
22. januar 2007 - 22:53 #6
SELECT indhold.id, indhold.overskrift, count(indhold_menupunkter.id) as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.status=1 and 'antal' != 0 GROUP BY indhold.id

Giver 0 rækker. Min oprindelige query gav ca. 50 rækker....??!?
Avatar billede hmortensen Nybegynder
22. januar 2007 - 22:55 #7
antal > 0

antal skal ikke i gnuffer, da det ellers vil blive betragtet som en tekststreng.
Avatar billede kalp Novice
22. januar 2007 - 22:57 #8
SELECT indhold.id, indhold.overskrift, count(indhold_menupunkter.id) as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.status=1 and 'antal' <> 0 GROUP BY indhold.id
Avatar billede mkjaer Nybegynder
22. januar 2007 - 22:57 #9
Hmmm...

SELECT indhold.id, indhold.overskrift, count( indhold_menupunkter.id ) AS antal
FROM indhold
LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid
WHERE indhold.status =1
AND antal !=0
GROUP BY indhold.id

MySQL returnerede: 

#1054 - Unknown column 'antal' in 'where clause'
Avatar billede kalp Novice
22. januar 2007 - 22:58 #10
det er rigtig nok
Avatar billede mkjaer Nybegynder
22. januar 2007 - 23:00 #11
Hvilket? (er rigtig nok)
Avatar billede kalp Novice
22. januar 2007 - 23:03 #12
SELECT indhold.id, indhold.overskrift, count(indhold_menupunkter.id) as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.status=1 and antal <> 0 GROUP BY indhold.id
Avatar billede mkjaer Nybegynder
22. januar 2007 - 23:07 #13
Ok, men den giver fejl hos mig:

#1054 - Unknown column 'antal' in 'where clause'

Måske hænger det samme med, at antal kommer fra count-funktionen?!?
Avatar billede mkjaer Nybegynder
22. januar 2007 - 23:16 #14
giver I op :-)
Avatar billede kalp Novice
22. januar 2007 - 23:21 #15
næh.. der er jo alternativer til den sql, men er du sikker på du joiner korrekt?

der står indhold.id = menupunktid

er det rigtigt???
Avatar billede kalp Novice
22. januar 2007 - 23:31 #16
nu ved jeg ikke om jeg har overset noget i denne, men det kan gøres på denne måde ellers..

SELECT indhold.id, indhold.overskrift FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = menupunktid WHERE indhold.id IN (SELECT indhold_menupunkter.id, count(indhold_menupunkter.id) as antal FROM indhold_menupunkter WHERE antal <> 0) indhold.status=1 GROUP BY indhold.id

grunden til at jeg synes det her ser underligt ud

indhold.id = menupunktid

er fordi din count går på
indhold_menupunkter.id

så hvor kommer den anden fra? menupunktid altså
Avatar billede kalp Novice
22. januar 2007 - 23:59 #17
har du selv givet op?
Avatar billede mkjaer Nybegynder
25. januar 2007 - 22:09 #18
Sorry, jeg fik ikke længere mail om nye indlæg.

Du har ret mht. indhold.id = menupunktid er forkert, den bør se således ud:

SELECT indhold.id , indhold.overskrift , count(indhold_menupunkter.id )as antal FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = indhold_menupunkter.menupunktid WHERE indhold.status =1 AND antal > 0 GROUP BY indhold.id

Anyway, så virker den fortsat ikke, og jeg får også fejl #1064 (syntax fejl) på Kalp's nyeste forslag.

Jeg er sgu lidt på r.... med denne her. Håber der findes en løsning. Giver naturligvis gerne flere point - 200 - for en løsning.

Takker forud,
Martin
Avatar billede kalp Novice
25. januar 2007 - 22:28 #19
SELECT indhold.id, indhold.overskrift FROM indhold LEFT JOIN indhold_menupunkter ON indhold.id = indhold_menupunkter.menupunktid WHERE indhold.id IN (SELECT indhold_menupunkter.menupunktid, count(indhold_menupunkter.menupunktid) as antal FROM indhold_menupunkter WHERE antal <> 0) indhold.status=1 GROUP BY indhold.id

og du rettede min til sådan der?
Avatar billede mkjaer Nybegynder
26. januar 2007 - 06:44 #20
Jeps, og den giver mig så denne fejl:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'indhold . status = 1 GROUP BY indhold . id'
Avatar billede mkjaer Nybegynder
26. januar 2007 - 06:52 #21
Jeg kører MySQL 5.0.27
Avatar billede mkjaer Nybegynder
26. januar 2007 - 08:00 #22
Jeg har fundet dette på mysql.com:

-------------------------------------------------------------------
SELECT SQRT(a*b) AS root FROM tbl_name GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;

Standard SQL doesn't allow you to refer to a column alias in a WHERE clause. This restriction is imposed because when the WHERE code is executed, the column value may not yet be determined.

For example, the following query is illegal: SELECT id, COUNT(*) AS cnt FROM tbl_name WHERE cnt > 0 GROUP BY id;

The WHERE statement is executed to determine which rows should be included in the GROUP BY part, whereas HAVING is used to decide which rows from the result set should be used.
-------------------------------------------------------------------

Mon det er HAVING, som kan hjælpe mig? Jeg forsøger at lege lidt med det, vender tilbage.

hilsen
Martin
Avatar billede mkjaer Nybegynder
26. januar 2007 - 08:06 #23
Dette er løsningen:

SELECT indhold.id, indhold.overskrift, count( indhold_menupunkter.id ) AS antal
FROM indhold
LEFT JOIN indhold_menupunkter ON indhold.id = indhold_menupunkter.menupunktid
WHERE indhold.status =1
GROUP BY indhold.id
HAVING antal <>0
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
Computerworld tilbyder specialiserede kurser i database-management

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