Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 从单独列为MIN()的列中选择SQL值_Php_Mysql_Mysqli_Min - Fatal编程技术网

Php 从单独列为MIN()的列中选择SQL值

Php 从单独列为MIN()的列中选择SQL值,php,mysql,mysqli,min,Php,Mysql,Mysqli,Min,我正在为订单开发一个分配函数,并尝试将订单分配给具有最少未决请求的用户。我想获取用户id,其中挂起的值是所有用户中最小的 例如: userID pending ------ ------- 0 3 1 0 <----This user has the least pending of all 2 4 您可以按待处理列对结果进行排序,请参见Simone Nigro对查询的注释。使用限制字,在结果中您将只得到第一行,在这种情况下,您

我正在为订单开发一个分配函数,并尝试将订单分配给具有最少未决请求的用户。我想获取用户id,其中挂起的值是所有用户中最小的

例如:

userID    pending
------    -------
0         3
1         0 <----This user has the least pending of all
2         4

您可以按待处理列对结果进行排序,请参见Simone Nigro对查询的注释。使用限制字,在结果中您将只得到第一行,在这种情况下,您将得到具有最小挂起值的结果

我现在看到了Aleksandar Miladinovic的情况,如果表中有许多行具有相同的挂起值:您可以执行:

获取挂起列的最小值的查询 使用上一步中获得的值接收具有该值的行

从writerdata\u tb中选择用户\u id,其中挂起=从writerdata\u tb中选择minpending


尝试以下方法:从writerdata_tb中选择userID,其中pending=从writerdata_tb中选择minpending

如果用户ID重复

SELECT
    t.userID
from 
    tasks as t
group by (t.userID)
order by sum(pending) asc 
limit 1
否则


建议对各种可能的答案进行比较:

EXPLAIN SELECT aa.userId, aa.pending
FROM writerdata_tb AS aa
INNER JOIN writerdata_tb AS bb 
ON aa.userId = bb.userId
WHERE aa.pending >= bb.pending
ORDER BY aa.pending ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   SIMPLE  aa  ALL     PRIMARY     NULL    NULL    NULL    4   Using temporary; Using filesort
1   SIMPLE  bb  ALL     PRIMARY     NULL    NULL    NULL    4   Using where; Using join buffer (Block Nested Loop)

按挂起的ASC订购,并且超过该限制1I thinl您可以有多个,实际上,否?如果有2个用户0挂起,会发生什么情况?选择全部还是仅选择一个?我将其限制为仅一个,以便每个订单请求平均分配给最后一个待处理的用户查看有一个Simone Nigro在注释中编写的查询和一个选择所有用户且最小待处理的查询..我记得读过一些关于嵌套查询的内容,我假设如果我使用限制,它应该只从我使用的任何方法返回一个值?选择所有用户并通过挂起值升序排序,并使用第一个用户的值作为最低值,这会更容易吗?
SELECT
    t.userID
from 
    tasks as t
order by pending asc 
limit 1
EXPLAIN SELECT aa.userId, aa.pending
FROM writerdata_tb AS aa
INNER JOIN writerdata_tb AS bb 
ON aa.userId = bb.userId
WHERE aa.pending >= bb.pending
ORDER BY aa.pending ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   SIMPLE  aa  ALL     PRIMARY     NULL    NULL    NULL    4   Using temporary; Using filesort
1   SIMPLE  bb  ALL     PRIMARY     NULL    NULL    NULL    4   Using where; Using join buffer (Block Nested Loop)
EXPLAIN SELECT userId, pending
FROM writerdata_tb
WHERE pending = (
    SELECT MIN(pending)
    FROM writerdata_tb 
);

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   PRIMARY     writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   Using where
2   SUBQUERY    writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   NULL
EXPLAIN SELECT userId, pending
FROM writerdata_tb
ORDER BY pending ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   SIMPLE  writerdata_tb   ALL     NULL    NULL    NULL    NULL    4   Using filesort
EXPLAIN SELECT t.userId
FROM writerdata_tb AS t
GROUP BY (
    t.userId
)
ORDER BY SUM(pending) ASC
LIMIT 1;

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   SIMPLE  t   index   PRIMARY     PRIMARY     4   NULL    4   Using temporary; Using filesort