Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询MySQL_Php_Mysql - Fatal编程技术网

Php SQL查询MySQL

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

我在下面执行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 ) - 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将别名添加到子查询中。