Я не могу разобраться, как построить этот SQL-запрос.
У меня есть 3 таблицы.
Пользователи Таблица
- user_id
- имя
- фотография
и т.д.
tag_ref таблица
- user_id
- tag_id
геолокация таблица
- user_id
- geolat
- Geolon
Что мне нужно сделать, так это найти пользователей по местоположению и с какими тегами они связались с ними. У меня оба запроса работают по отдельности.
Это то, что я использовал для запроса местоположения:
$sql_search_people = "SELECT user_id, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolon ) - radians(?) ) + sin( radians(?) ) * sin( radians( geolat ) ) ) ) AS distance FROM geolocation
HAVING distance < '25'";
Затем мне нужно отфильтровать результаты по tag_id из таблицы tag_ref. Пользователи могут искать по нескольким тегам. Я сделал этот seperatley здесь:
$sql_search_people = "SELECT b.user_id, b.name, b.picture, b.tagline, b.genres FROM tag_ref AS a LEFT JOIN users AS b ON a.user_id = b.user_id WHERE a.tag_id IN ($in) GROUP BY a.user_id";
Теперь мне просто нужно выяснить, как объединить два вместе в один запрос. Что я не могу понять! Я пробовал соединения и подзапросы, но мне действительно трудно их понять.
Любая помощь будет принята с благодарностью.
** ОБНОВЛЕНИЕ **
Проиграв немного больше, мне удалось заставить это работать:
$sql_search_people = "SELECT a.user_id, b.user_id, c.user_id, c.tag_id, b.name, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolon ) - radians(?) ) + sin( radians(?) ) * sin( radians( geolat ) ) ) ) AS distance FROM geolocation AS a RIGHT JOIN tag_ref AS c ON a.user_id = c.user_id RIGHT JOIN users AS b ON a.user_id = b.user_id WHERE c.tag_id IN ($in) HAVING distance < '25' ";
Но, конечно, это дублирует результаты, когда у пользователя более одного тега. Когда я добавляю группу в группу по user_id, запрос не выполняется?