Php 从单独列为MIN()的列中选择SQL值
我正在为订单开发一个分配函数,并尝试将订单分配给具有最少未决请求的用户。我想获取用户id,其中挂起的值是所有用户中最小的 例如: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对查询的注释。使用限制字,在结果中您将只得到第一行,在这种情况下,您
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