MySQL - 联合和排序/排序行

标签 mysql database sql-order-by union

我正在使用 MySQL 的 UNION 功能检索表结果。该表基本上包含来自销售订单

订购商品

下面是我使用的查询:

SET @meta_id=0; 
SELECT bsb.ID AS meta_id, bsb.ORDER_ID AS order_item_id, '_product_id' AS meta_key, bsb.PRODUCT_ID AS meta_value, 1 AS origin
FROM b_sale_basket bsb
WHERE bsb.ORDER_ID = 255
UNION
SELECT bsb.ID AS meta_id, bsb.ORDER_ID AS order_item_id, '_qty' AS meta_key, bsb.QUANTITY AS meta_value, 2 AS origin
FROM b_sale_basket bsb
WHERE bsb.ORDER_ID = 255
) sales_order_meta 

上面的第一个 查询检索 订购的产品 order_item_id255

上面的第二个查询检索每个订购的产品的数量

旁注:如果您问我为什么要这样查询它们,因为它们都属于同一个表,那是因为我正在尝试像 woocommerce 一样检索它> 对其订购的元素执行...

上面查询的输出如下所示:

http://i.stack.imgur.com/qPsjv.png

但是,我希望对结果进行排序,以便在每个订购的产品下方 下方订购的每个产品的数量 他们..

我想要的最终结果是这样的: http://i.stack.imgur.com/wx6Aw.png

请帮助我...

最佳答案

您可以使用用户定义的变量为每个单独的查询赋予排名,因此第一行查询 1 的排名为 1,类似地,第二个查询的第一行的排名为 1,然后是 2、3,依此类推然后按此行号排序结果

SELECT bsb.ID AS meta_id, bsb.ORDER_ID AS order_item_id, '_product_id' AS meta_key, bsb.PRODUCT_ID AS meta_value, 1 AS origin
,@r:= @r +1 AS `row`
FROM b_sale_basket bsb,(SELECT @r:=0) t
WHERE bsb.ORDER_ID = 255
UNION
SELECT bsb.ID AS meta_id, bsb.ORDER_ID AS order_item_id, '_qty' AS meta_key, bsb.QUANTITY AS meta_value, 2 AS origin
,@r:= @r +1 AS `row`
FROM b_sale_basket bsb,(SELECT @r:=0) t
WHERE bsb.ORDER_ID = 255
ORDER BY `row`

编辑

您也可以尝试ORDER BY order_item_id,meta_key

关于MySQL - 联合和排序/排序行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357975/

相关文章:

php - 如何在 php 上保存从 mysql 读取的日期数组?

java - 搜索 map 或列表

c# - 如何将 SQLite .db 添加到 C#.NET 项目中

mysql - 在 :many pair of tables in MySQL 中选择一行的最有效方法

mysql - 唯一的复合键是否针对检索性能进行了优化?

mysql - 选择/插入时出现奇数 CONCAT 错误

mysql - 仅通过分配查询文本获取 "Arguments are of the wrong type..."异常

database - 即使自定义验证失败 Rails 3 也会保存记录

mysql - 按时间排序和分组

mysql - 如何在没有标点符号的情况下在mySQL中排序