Php SQL查询MySQL
我在下面执行SQL查询时遇到以下错误。你认为哪里不对Php SQL查询MySQL,php,mysql,Php,Mysql,我在下面执行SQL查询时遇到以下错误。你认为哪里不对 #1054 - Unknown column 'distance' in 'where clause' SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( 23 ) ) * Cos( RADIANS( 23 ) - RADIA
#1054 - Unknown column 'distance' in 'where clause'
SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( 23 ) ) * Cos( RADIANS( 23 ) - RADIANS( users.longitude ) ) + Sin( RADIANS( users.latitude ) ) * Sin( RADIANS( 23 ) ) ) AS distance
FROM users
WHERE distance >=1000
ORDER BY distance
LIMIT 20
where子句在别名之前求值
SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, distance
FROM
(SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( 23 ) ) * Cos( RADIANS( 23 ) - RADIANS( users.longitude ) ) + Sin( RADIANS( users.latitude ) ) * Sin( RADIANS( 23 ) ) ) AS distance
FROM users
) as u1
WHERE distance >=1000
ORDER BY distance
LIMIT 20
使用HAVING子句代替WHERE子句。WHERE子句中不存在别名distance
SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( 23 ) ) * Cos( RADIANS( 23 ) - RADIANS( users.longitude ) ) + Sin( RADIANS( users.latitude ) ) * Sin( RADIANS( 23 ) ) ) AS distance
FROM users
HAVING distance >=1000
ORDER BY distance
LIMIT 20
您可以使用内部查询,如
SELECT *
FROM
(
SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos( Cos( RADIANS( users.latitude ) ) * Cos( RADIANS( 23 ) ) * Cos( RADIANS( 23 ) - RADIANS( users.longitude ) ) + Sin( RADIANS( users.latitude ) ) * Sin( RADIANS( 23 ) ) ) AS distance
FROM Users
) as u1
WHERE distance >=1000
ORDER BY distance
LIMIT 20
距离不是一个列名称这就是为什么我喜欢在LINQ中强制使用的格式,而不是从WHERE SELECT中。我不知道WHERE子句首先计算+1谢谢,但是我现在在您的查询中发现了这个错误#1248-每个派生表都必须有自己的alias@Jae将别名添加到子查询中。