Php 使用orderby和FIELD函数为每个自定义列表获取单个值
我有一个名为Php 使用orderby和FIELD函数为每个自定义列表获取单个值,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我有一个名为orders的表,有两列orderNumber和status,如下所示: orderNumber | status ---------------------------- 10100 | Shipped | 10101 | Resolved | 10102 | Shipped | 10103 | Resolved | 10104 | Cancelled | 10105
orders
的表,有两列orderNumber
和status
,如下所示:
orderNumber | status
----------------------------
10100 | Shipped |
10101 | Resolved |
10102 | Shipped |
10103 | Resolved |
10104 | Cancelled |
10105 | Shipped |
10106 | Cancelled |
10107 | Disputed |
10108 | In Process |
10109 | Cancelled |
我希望获得订单号为order by custom list的单一状态,如下所示:
orderNumber | status
----------------------------
10108 | In Process |
10104 | Cancelled |
10101 | Resolved |
10107 | Disputed |
10100 | Shipped |
我尝试了以下查询:
SELECT orderNumber, status
FROM orders
ORDER BY FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped')
但这会给我所有排序结果。看起来您希望按
状态
分组,为每个状态
值选择最小的订单号
,然后根据字段
表达式进行排序。您可以使用此查询执行此操作:
SELECT MIN(orderNumber) AS orderNumber, status
FROM orders
GROUP BY status
ORDER BY FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped')
输出:
orderNumber status
10108 In Process
10104 Cancelled
10101 Resolved
10107 Disputed
10100 Shipped
您似乎希望按
状态
分组,为每个状态
值选择最小的订单号
,然后根据字段
表达式进行排序。您可以使用此查询执行此操作:
SELECT MIN(orderNumber) AS orderNumber, status
FROM orders
GROUP BY status
ORDER BY FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped')
输出:
orderNumber status
10108 In Process
10104 Cancelled
10101 Resolved
10107 Disputed
10100 Shipped
是什么定义了输出中应该包含哪些
orderNumber
?为什么在orderby字段中使用字段值?是什么定义了输出中应该包含哪些orderNumber
?为什么在orderby字段中使用字段值?另一个查询:1。如何获得orderNumber的随机顺序?2.当orderNumber是string时,如何得到相同的结果?@AnkurMishra我不知道你所说的1是什么意思。对于2,即使orderNumber是字符串,如果它们都是5个字符长的话,查询也应该可以正常工作,因为在这种情况下MIN仍然可以工作。还有一个查询:1。如何获得orderNumber的随机顺序?2.当orderNumber是string时,如何得到相同的结果?@AnkurMishra我不知道你所说的1是什么意思。对于2,即使orderNumber是字符串(如果它们都是5个字符),查询也应该可以正常工作,因为在这种情况下MIN仍然可以工作。