Php 用户数据库-有效和无效请求
这就是我得到的:Php 用户数据库-有效和无效请求,php,mysql,database,Php,Mysql,Database,这就是我得到的: 用户表格 用户名(文本) 状态(数字) 请求表 用户名(文本,与用户表中的相同) 符合条件(0或1) 有效(0或1) 我想选择所有用户,其合格(合格=1)和有效(有效=1)请求数大于所有合格(合格=1)和无效(有效=0)请求数,且用户发出的所有合格请求数大于10 什么样的SQL查询是实现这一点的最佳和最快的方法 这就是我现在所处的位置-它向我显示了有效的和所有的请求,但它绝对不应该是这样的-选择太多,查询速度非常慢 SELECT U.username, (SELEC
用户
表格
- 用户名(文本)
- 状态(数字)
请求
表
- 用户名(文本,与用户表中的相同)
- 符合条件(0或1)
- 有效(0或1)
选择
所有用户,其合格(合格=1)和有效(有效=1)请求数大于所有合格(合格=1)和无效(有效=0)请求数,且用户发出的所有合格请求数大于10
什么样的SQL查询是实现这一点的最佳和最快的方法
这就是我现在所处的位置-它向我显示了有效的和所有的请求,但它绝对不应该是这样的-选择太多,查询速度非常慢
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;
如果我理解这个问题 第一个限定符:请求数大于所有合格(合格=1)和无效(有效=0)请求数 如果此处的数字大于10,则还必须满足“且用户提出的所有合格请求的数量大于10”。否则,我们应该设置为10 因此,我认为以下各项符合您的标准:
select username from requests where eligible = 1 and valid = 1 group by username having count(username) > ?
绑定第一个查询的两个值中的较大值或10。您可以使用
group by
和having
子句来表示逻辑。在这种情况下,您可以通过执行算术操作来模拟布尔逻辑。因此,qualified*valid
仅当请求既符合条件又有效时才是1
其余部分只是将您的条件转换为适当的逻辑:
select username
from requests
group by username
having sum(eligible) > 10 and
sum(eligible*valid) > sum(eligible*(1-valid));
给我们一些你已经有的代码tried@SuperDj在第一篇文章中添加了一些代码。。
select username
from requests
group by username
having sum(eligible) > 10 and
sum(eligible*valid) > sum(eligible*(1-valid));