MySQL从具有HAVING子句的多个表中选择

时间:2014-10-14 13:45:29

标签: php mysql enums multiple-select-query

我有一个小型数据库,其中包含我在下面列出的几个表:

用户

| Name         | Type              | Extra        |      
| id           | int(10)           | Auto Increment    
| emailAddress | varchar(150)                          
| socialNetwrk | enum('G','F','T')                     
| photoUrl     | varchar(255)                          
| regLat       | decimal(10, 8)                        
| regLng       | decimal(11, 8)                        
| regDate      | timestamp                             
| active       | enum('1','0')     | default = 1    

地点

| Name      | Type          | Extra                       
| id        | int(10)       | Auto Increment    
| userID    | int(10)       | Foreign Key (users.id)    
| lat       | decimal(10, 8)|     
| lng       | decimal(11, 8)|    
| timestamp | timestamp     | CURRENT_TIMESTAMP

我使用以下查询来返回拥有有效帐户的所有附近用户(当前用户除外):

$result = $mysqli->query("
  SELECT DISTINCT l.userID
              , u.active
              , (3959 * acos( cos( radians($lat) ) 
                            * cos( radians( lat) ) 
                            * cos( radians( lng) - radians($lng) ) 
                            + sin( radians($lat) ) 
                            * sin( radians( lat )) 
                            ) 
                ) distance 
           FROM locations l
           JOIN users u 
           HAVING distance < 30 
           AND userID != $cur_user_id 
           AND active = 1 
           ORDER 
           BY RAND()
")or die($mysqli->error);

我没有错误地收到结果但是我不能让它只包含活动帐户(标记为0而不是1)。

1 个答案:

答案 0 :(得分:0)

也许是这样的?

SELECT DISTINCT l.userID
              , u.active
              , (3959 * acos( cos( radians($lat) ) 
                            * cos( radians( lat) ) 
                            * cos( radians( lng) - radians($lng) ) 
                            + sin( radians($lat) ) 
                            * sin( radians( lat )) 
                            ) 
                ) distance 
           FROM locations l
           INNER JOIN users u ON l.userID = u.id
           WHERE distance < 30 
           AND userID != $cur_user_id 
           AND active = 1 
           ORDER BY RAND()