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

Решение

Может как то так?

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector