这就是我得到的:
用户
表
- 用户名(文本)
- 状态(数字)
请求
表
- 用户名(文本,与用户表中的相同)
- 符合条件(0 或 1)
- 有效(0 或 1)
我想SELECT
所有符合条件(eligible = 1)和有效(valid = 1)请求的数量大于所有符合条件(eligible = 1)和无效(valid = 0) 请求并且用户发出的所有符合条件的请求的数量大于 10。
什么 SQL 查询是实现该目标的最佳和最快的?
这就是我现在所在的位置 - 它向我显示了有效的和所有的请求,但它绝对不应该是那样的 - 太多的 SELECTS 并且它的查询速度非常慢......
SELECT U.username,
(SELECT COUNT(R.username) FROM requests AS R
WHERE U.username = R.username AND eligible = 1 AND valid = 1) AS ValidRequests,
(SELECT COUNT(R.username) FROM requests AS R
WHERE U.username = R.username AND eligible = 1) AS AllRequests
FROM users AS U;
最佳答案
您可以使用 group by
和 having
子句来表达逻辑。在这种情况下,您可以通过进行算术运算来模拟 bool 逻辑。因此,仅当请求符合条件且有效时,eligible*valid
才为 1
。
剩下的只是将您的条件转换为适当的逻辑:
select username
from requests
group by username
having sum(eligible) > 10 and
sum(eligible*valid) > sum(eligible*(1-valid));
关于php - 用户数据库 - 有效和无效请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23969567/