I have the following SQL:
x
SELECT members.id, FLOOR(DATEDIFF('2019-10-25', crew_cv.dob) / 365.25) as age
FROM members
JOIN crew_cv ON members.id=crew_cv.user_id
WHERE members.active=1 AND age>20 AND age<30
ORDER BY crew_cv.last_name, crew_cv.first_name
LIMIT 0,30
And I get the following error in phpMySQL:
#1054 - Unknown column 'age' in 'where clause'
How can I use the calculated value age
in the WHERE
clause?
Advertisement
Answer
In sql you can’t use alias in where clause (you must repeat the column code )
SELECT members.id, FLOOR(DATEDIFF('2019-10-25', crew_cv.dob) / 365.25) as age
FROM members
JOIN crew_cv ON members.id=crew_cv.user_id
WHERE members.active=1 AND FLOOR(DATEDIFF('2019-10-25', crew_cv.dob) / 365.25)>20
AND age<FLOOR(DATEDIFF('2019-10-25', crew_cv.dob) / 365.25)
ORDER BY crew_cv.last_name, crew_cv.first_name
LIMIT 0,30
but you could create a view
create view my_view as
select members.id, crew_cv.last_name, crew_cv.first_name , FLOOR(DATEDIFF('2019-10-25', crew_cv.dob) / 365.25) as age
FROM members
JOIN crew_cv ON members.id=crew_cv.user_id
WHERE members.active=1
and then
SELECT id, age, last_name, first_name
from my_view
where age>20 AND age<30
ORDER BY last_name, first_name
LIMIT 0,30
or apply the condition to an having clause
In sql there the cluases are evalueated in a specific order
the where condition is evaluated before select clause (so the column alias name in not know in this phase)
instead the having clause is evaluated after the select clause