2016-09-26 7 views
-1

Пользователи имеют несколько местоположений, я хочу выбрать всех пользователей, у которых есть хотя бы одно общее место для аутентифицированного пользователя.mysql select with sub query where close

Fe

select * from users as user where 
(select location_id from user_locations where user_id = auth()->user->id) 
'has common operator' 
(select location_id from user_locations where user_id = user.id) 

я хочу, чтобы сравнить два массива, если у них есть общие элементы, но я думаю, что MySQL не имеет такой функции

ответ

1

Попробуйте один

SELECT u.* 
FROM users u 
LEFT JOIN user_locations ul ON ul. user_id = u.id 

WHERE ul.location_id IN (
    SELECT location_id 
    FROM user_locations 
    WHERE user_id = auth()->user->id 
) 
+0

это не будет работать без выбора отдельного, поскольку он будет выбирать того же пользователя столько раз, сколько у них есть common location_id. это также не оптимальный способ и не хочет использовать соединение. – Doodles

+0

Я хочу сравнить с массивом, если у них есть общие элементы, но я думаю, что mysql не имеет такой функции. – Doodles

+0

Этот LEFT JOIN выполняет как внутреннее соединение. – jarlh

0

Может быть это будет работать, попробуйте пожалуйста.