用户数据库 - 有效和无效的请求

时间:2014-05-31 11:33:29

标签: php mysql database

所以这就是我得到的:

users

  • 用户名(文字)
  • 状态(数字)

requests

  • 用户名(文字,与用户表格相同)
  • 符合条件(0或1)
  • 有效(0或1)

我希望SELECT符合条件(符合条件= 1)和有效(有效= 1)请求数量大于所有符合条件(符合条件= 1)和无效(有效= 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;

2 个答案:

答案 0 :(得分:0)

如果我理解了这个问题......

第一个限定符:请求大于所有符合条件(符合条件= 1)和无效(有效= 0)请求的数量

select count(username) from requests where eligible = 1 and valid = 0;

如果此处的数字高于10,则还必须满足“并且用户所做的所有符合条件的请求的数量都高于10”。否则,我们应该将它设置为十。

所以,我认为以下内容符合您的标准:

select username from requests where eligible = 1 and valid = 1 group by username having count(username) > ?

绑定第一个查询的两个值中的较大值或10。

答案 1 :(得分:0)

您可以使用group byhaving子句表达逻辑。在这种情况下,您可以通过算术操作来模仿布尔逻辑。因此,eligible*valid仅在请求合格且有效时才为1

其余的只是将您的条件转换为适当的逻辑:

select username
from requests
group by username
having sum(eligible) > 10 and
       sum(eligible*valid) > sum(eligible*(1-valid));