我有两张桌子
一个是user_matchs
id | user_id | matched_user_id | status
36 | 17 | 24 | passed
37 | 17 | 25 | friend
另一个是用户
id | name | address | age
17 | mamun | test | 23
25 | shihab | test2 | 30
24 | shihab2 | test22 | 30
现在我想根据给定userId
假设我是用户17.现在我想看到所有不是我的朋友并且通过me.if user_matchs表的用户
user_id=17 and matched_user_id=24 and status=passed
那么这意味着我通过了用户24,但是如果24也通过我那么24我没有通过我,那么行将是
user_id=17 and matched_user_id=24 and status=friend
另一个逻辑
user_id=24 and matched_user_id=17 and status=passed
然后它意味着用户24通过了我,但是如果17还通过我那么我没有通过用户17,那么行将是
user_id=24 and matched_user_id=17 and and status=friend
当我向userId 17提供搜索查询时,它不返回任何用户,因为用户25是用户17的朋友,而用户17已经通过了用户24。
但是当我在搜索查询中给出userId 24时,它返回用户17和25.因为用户25不是朋友或者没有通过用户24而用户17不是朋友,或者用户24没有通过用户17。 / p>
我正在尝试使用此查询,但它无法正常工作:此处24为id
SELECT *
FROM `users`
WHERE users.id != 24 AND
users.id NOT IN (SELECT matched_user_id
FROM `user_matchs`
WHERE user_id = '24'
)
and
users.id NOT IN (SELECT user_id
FROM `user_matchs`
WHERE matched_user_id = '24'
)
答案 0 :(得分:2)
第二个子查询需要检查status
字段,因此它只排除朋友,而不是通过你的人。
SELECT *
FROM `users`
WHERE users.id != 24 AND
users.id NOT IN (SELECT matched_user_id
FROM `user_matchs`
WHERE user_id = '24'
)
and
users.id NOT IN (SELECT user_id
FROM `user_matchs`
WHERE matched_user_id = '24'
AND status = 'friend'
)