[MySQL] problemen met query die NOT NULL bevat

Pagina: 1
Acties:

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 07-05 15:56
Misschien kan iemand mij helpen.

Ik heb een prachtige query gebouwd en op het moment dat ik een nieuwe query aan het script toevoegde werkt hij niet (meer). De query is de volgende:

select count(*) as count, stats_referer from stats where stats_referer=NOT NULL group by stats_referer order by count desc limit 5

Er zitten entries in de tabel en ook entries met een waard in het veld `stats_referer` die niet NULL zijn. Hij zou dus minstens 1 rij terug moeten geven, maar hij geeft nu terug dat er 0 rijen zijn gevonden.
Ik heb voordat deze query ermee ophield een query in het script gezet, en dus uitgevoerd, die als volgt was:

select count(*) as count, stats_date from stats where stats_date > DATE_SUB(NOW(), INTERVAL 5 DAYS) group by stats_date order by stats_date desc limit 1

Ik weet niet of deze query ermee te maken heeft, het lijkt mij namelijk niet, maar volledigheid is ook wat waard.

Iemand een idee waarom deze query consequent 0 rijen retourneerd?

Read the code, write the code, be the code!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

= NOT NULL werkt niet voor zover ik weet. Probeer eens je WHERE aan te passen:
code:
1
2
3
4
5
6
SELECT COUNT(*) as `count`, `stats_referer`
FROM `stats`
WHERE NOT ISNULL(`stats_referer`)
GROUP BY `stats_referer`
ORDER BY `count` DESC
LIMIT 5

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:42
Of alternatief: foo IS NOT NULL (leest wat makkelijk, imho). Belangrijk is de IS in plaats van '='.

[ Voor 23% gewijzigd door Soultaker op 29-03-2005 00:14 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Soultaker schreef op dinsdag 29 maart 2005 @ 00:14:
Of alternatief: foo IS NOT NULL (leest wat makkelijk, imho). Belangrijk is de IS in plaats van '='.
Idd. :)

Misschien ook handig als ik even de reden daarvoor uitleg:
Deze query geeft de waarde 0 (false):
code:
1
SELECT 1 = NULL

Deze query geeft echter ook false terug:
code:
1
SELECT NULL = NULL

Waarom is dat? Simpel: de = operator vergelijkt de waarden van twee variabelen met elkaar. Echter: NULL is per definitie gelijk aan geen enkele andere waarde. Dus ook niet aan NULL. Daarvoor is in SQL de IS-operator geïntroduceerd, waarmee je kan kijken of een waarde gelijk is aan NULL.

Daar geeft dit wel 1 (true):
code:
1
SELECT NULL IS NULL

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 07-05 15:56
Hmm, ja, maar welk apart dat de query out of the blue niet lekker meer werkt, maar ik zal er verder geen traan om laten :-)

Mijn dank is groot

Read the code, write the code, be the code!


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Soultaker schreef op dinsdag 29 maart 2005 @ 00:14:
Of alternatief: foo IS NOT NULL (leest wat makkelijk, imho). Belangrijk is de IS in plaats van '='.
ISNULL(...) is een functie en zal zeker in MySQL niet zomaar via een index uitgevoerd worden, bovendien heeft het bij mijn weten een ander doel dan domweg retourneren of de waarde NULL is. Dus jouw code is geen alternatief, jouw code is (imho) de goede en de andere als ie correct werkt een alternatief.
wackmaniac schreef op dinsdag 29 maart 2005 @ 10:35:
Hmm, ja, maar welk apart dat de query out of the blue niet lekker meer werkt, maar ik zal er verder geen traan om laten :-)
out of the blue? Dat verbaast me ten zeerste, want volgens mij is dat iets dat ook in MySQL altijd al via IS ipv = gecontroleerd moest worden.

[ Voor 27% gewijzigd door ACM op 29-03-2005 10:59 ]

Pagina: 1