WHERE子句不起作用,包含代码示例

时间:2015-04-13 03:55:52

标签: php mysql

我在下面有这个MySQL查询。它工作正常。

$query = sprintf("SELECT id, name, fee, lat, lng, ( 3959 * acos( cos( radians('%s') ) 
    * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) 
    + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance 
    FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20", 
    mysql_real_escape_string($center_lat), mysql_real_escape_string($center_lng), 
    mysql_real_escape_string($center_lat), mysql_real_escape_string($radius));

我正在尝试添加WHERE条款,如下所示,它无法正常工作

$query = sprintf("SELECT id, name, fee, lat, lng, ( 3959 * acos( cos( radians('%s') ) 
    * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) 
    + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance 
    FROM markers WHERE show <> 0 HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
    mysql_real_escape_string($center_lat), mysql_real_escape_string($center_lng),
    mysql_real_escape_string($center_lat), mysql_real_escape_string($radius));

show是一个充当旗帜的字段。如果它包含0,我希望在上面的查询中忽略该记录。 show目前在我的MySQL数据库中定义为TINYINT(1)

1 个答案:

答案 0 :(得分:1)

可能是一个反击问题:

我已经包围了“#SHOW&#39;通过反击。这里只是查询部分。试试这个。

SELECT id, 
           name, 
           fee, 
           lat, 
           lng, 
           ( 3959 * Acos(Cos(Radians('%s')) * Cos(Radians(lat)) * Cos( 
                         Radians(lng) - Radians('%s')) 
                                  + Sin 
                                  (Radians('%s')) * Sin(Radians(lat))) ) AS distance 
    FROM   markers 
    WHERE  `SHOW` <> 0 
    HAVING distance < '%s' 
    ORDER  BY distance 
    LIMIT  0, 20 

修改:

反引号用于表和列标识符,但仅在标识符为MySQL reserved keyword时或标识符包含空格字符或超出限制集的字符时才需要。通常建议尽可能避免使用保留关键字作为列或表标识符,以避免引用问题。