2016-09-26 131 views
-1

用戶有多個位置,我想選擇至少有一個共同的位置,以驗證用戶的所有用戶。mysql選擇與子查詢關閉

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

這不會沒有選擇不同的工作,COS會選擇相同的用戶多次,因爲他們有共同的location_id。這也不是最佳方式,也不想使用連接。 – Doodles

+0

我想比較數組,如果他們有共同的元素,但我認爲MySQL沒有這樣的功能 – Doodles

+0

LEFT JOIN作爲一個內部聯接執行。 – jarlh

0

也許這將工作,請嘗試。

select * 
from users as user 
where 
exists (
    select 1 
    from user_locations ul 
    where ul.user_id = user.id 
    and exists (
     select 1 
     from user_locations ul_in 
     where ul_in.user_id = auth()->user->id 
     and ul_in.location_id = ul.location_id 
    ) 
)