gpt4 book ai didi

php - Mysql查询没有返回正确的结果

转载 作者:行者123 更新时间:2023-11-29 06:27:07 25 4
gpt4 key购买 nike

我有两张 table

一个是 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。现在我想查看所有不是我 friend 的用户以及通过我的用户。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 的 friend ,而用户 17 已经超过了用户 24。

但是当我在搜索查询中给出 userId 24 时,它会返回用户 17 和 25。因为用户 25 不是 friend 或者没有通过用户 24 而用户 17 不是 friend 或者用户 24 没有通过用户 17。

我正在尝试这个查询,但它不能正常工作:这里给定了 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

最佳答案

第二个子查询需要检查status字段,所以它只排除 friend ,不排除经过你的人。

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

sqlfiddle

关于php - Mysql查询没有返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30311294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com