Mysql查询未返回正确的结果

时间:2015-05-18 19:23:48

标签: php mysql sql mysqli

我有两张桌子

一个是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'
                              ) 

sql fiddle

1 个答案:

答案 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'
                    ) 

this

相关问题