2014-10-14 2 views
0

У меня есть небольшая база данных, которая состоит из нескольких таблиц, которые я изложенные ниже:MySQL Выбор из несколько таблицы с предложением HAVING

Пользователей

| 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).

+0

Вы не ставите 'userID! = '$ Cur_user_id' AND active = '1'' в' has', а в предложение 'where'. – Daan

+0

Использование предложения WHERE дает этот ответ: Неизвестный столбец «расстояние» в разделе «где» – jampez77

+0

В стороне. Существует ** больше поддержки ** для функций 'mysql_ *', они [** официально устарели **] (https://wiki.php.net/rfc/mysql_deprecation) ** не поддерживается ** и будет [** удален **] (http://php.net/manual/en/function.mysql- connect.php # warning) в будущем. Вы должны обновить свой код с помощью [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/mysqli), чтобы обеспечить функциональность вашего проекта в будущем. – misterManSam

ответ

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() 
+0

Это работает после изменения WHERE for HAVING. Большое спасибо @ Andrew – jampez77

Смежные вопросы