[MySQL]Eigen gekozen column naam in WHERE clause

Pagina: 1
Acties:

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik heb een query die afstanden berekent:

code:
1
2
3
4
5
SELECT dealers.*,
(1.609344 * (3958 * PI() * SQRT( POW( (".$lat." - zipcodes.lat) , 2) + COS( ".$lat." / 57.29578 ) * COS( zipcodes.lat / 57.29578 ) * POW( (".$lng." - zipcodes.lng) , 2) ) / 180) ) AS distance
FROM dealers
LEFT JOIN zipcodes ON zipcodes.zipcode = dealers.zipcode
ORDER BY distance ASC


Nu kan ik dus netjes sorteren op distance, maar ik wil ook kunnen kiezen dat alle distances groter dan 100 niet worden laten zien.

code:
1
WHERE distance < 100


Alleen dan krijg ik een error 'unknown column'. Logisch, de column bestaat ook niet, maar hoe het nou dat ik er wel op kan sorteren maar niet op selecteren?

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 01-12 15:22

Maasluip

Frontpage Admin

Kabbelend watertje

In Oracle SQL schrijf je dan "having distances < 100". Probeer eens of MySQL dat ook pikt.

Signatures zijn voor boomers.


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Maasluip schreef op zaterdag 05 mei 2007 @ 10:40:
In Oracle SQL schrijf je dan "having distances < 100". Probeer eens of MySQL dat ook pikt.
Ja nog ook :)

Ik snap nogsteeds niet waarom die WHERE hem dan niet pakt, MySQL docs merken er ook bar weinig op aan...

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 01-12 15:22

Maasluip

Frontpage Admin

Kabbelend watertje

Having gebruik je bij berekende velden (having SUM(veld) > 100) en where gebruik je bij geselecteerde velden (where veld > 100).

De HAVING functionaliteit kun je intern niet combineren met de WHERE functionaliteit omdat voordat je een HAVING uitvoert je eerst de berekening die bij die HAVING hoort moet doen, en die berekening kun je pas doen nadat je de selectie (inclusief WHERE clause) hebt uitgevoerd. HAVING moet dus een apart statement zijn en moet dus ook na de gebruikelijke select worden uitgevoerd.

heeft die Crystal Reports cursus van een half jaar geleden toch nog nut

Signatures zijn voor boomers.


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:19
In MSSQL werkt deze omweg:
code:
1
2
3
4
5
6
7
8
SELECT * FROM 
(
  SELECT dealers.*,
  (1.609344 * (3958 * PI() * SQRT( POW( (".$lat." - zipcodes.lat) , 2) + COS( ".$lat." / 57.29578 ) * COS( zipcodes.lat / 57.29578 ) * POW( (".$lng." - zipcodes.lng) , 2) ) / 180) ) AS distance
  FROM dealers
  LEFT JOIN zipcodes ON zipcodes.zipcode = dealers.zipcode
) x
WHERE formule>100


Vergeet niet om een alias op te geven achter de subselect en natuurlijk geen dubbele kolomnamen.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Dan is de HAVING variant leesbaarder en waarschijnlijk ook tenminste even snel.

Wie trösten wir uns, die Mörder aller Mörder?


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 01-12 13:11
WHERE wordt gebruikt om je resultaten set op te bouwen, HAVING om deze achteraf te filteren.
'distance' is de uitkomt van een formule, welke pas na het bepalen van de resultatenset bekend is. Met de having kun je deze hierna wegfilteren.
De berekening is nog niet uitgevoerd op het moment dat de where wordt verwerkt.
Pagina: 1