Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用户数据库-有效和无效请求_Php_Mysql_Database - Fatal编程技术网

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