【问题标题】:mysql select all, group by orderidmysql 全选,按orderid分组
【发布时间】:2011-08-05 06:33:10
【问题描述】:

我想知道是否有人可以帮助我从表中选择信息,但根据订单 ID 对结果进行分组。我确信这很简单,但我似乎无法让代码工作。

这是我的尝试 - 只显示 1 个结果,而不是 6 个:

  • 4 个结果,orderid 为 55542
  • 2 个结果,orderid 为 55543

SQL:

SELECT *
FROM #__users_orders
WHERE userid = 22 
GROUP BY orderid 
ORDER BY date DESC

任何帮助将不胜感激:)

编辑:

我想实现这个(或类似的)

Array[55542]
(
    [0] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [1] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

    [2] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [3] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55542
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

)

Array[55543]
(
    [0] => stdClass Object
        (
            [id] => 6
            [userid] => 66
            [orderid] => 55543
            [date] => 2011-08-05 16:30:24
            [code] => 121021
            [title] => 7 STAR CHICKEN A/KING 71198 1.3KG
            [units] => 2
            [ctns] => 
        )

    [1] => stdClass Object
        (
            [id] => 1
            [userid] => 66
            [orderid] => 55543
            [date] => 2011-08-05 16:06:12
            [code] => 302371
            [title] =>  ANCHOVY FILL 730GM
            [units] => 2
            [ctns] => 
        )

)

【问题讨论】:

  • 不清楚你想要什么。你已经按orderid 分组了,你想达到什么目的?
  • 您能否发布您正在使用的源数据的示例?
  • 对结果进行分组后要做什么?您必须将聚合函数与 group by 一起使用。 (我讨厌 MySQL 允许这样做!)
  • 我编辑了我的问题,希望它更有意义:)
  • 你想做的与GROUP BY无关。它是分组,但以另一种方式。

标签: php mysql grouping


【解决方案1】:
SELECT *
FROM #__users_orders
WHERE userid = 22 
ORDER BY orderid DESC

只需像这样选择您的项目,然后通过迭代结果并为每个新的 orderid 创建一个新数组,在前端创建您的对象/数组层次结构。

【讨论】:

  • 是的,这可能是 OP 真正想要的。
【解决方案2】:

查询似乎没问题,也许你提取结果的方式错误

SELECT * FROM table GROUP BY field1;

应该返回相同的行数

SELECT field1, field2 FROM table GROUP BY field1;

但数字不同

从表中选择 *;

【讨论】:

    【解决方案3】:
    SELECT orderid, COUNT(*)
    FROM #__users_orders
    WHERE userid = 22 
    GROUP BY orderid 
    ORDER BY date DESC
    

    通常,您必须使用聚合(例如 COUNT、SUM)和 GROUP BY 匹配。这样 SELECT 中的列而不是 COUNT 或 SUM 中的列都在 GROUP BY 中

    只有 MySQL 允许您遵循此规则。其他数据库引擎会报错。

    【讨论】:

      【解决方案4】:

      您不应在此查询中选择“*”。

      当您按“某些列”分组时。您只能选择“某些列”或 some_aggregate_function(其他列)。

      例如如果您想获取每个订单 ID 的总订单大小和最新日期,您可以执行以下操作 -

      SELECT orderid, sum(ordersize), max(date) FROM #__users_orders WHERE userid = 22 GROUP BY orderid ORDER BY max(date) DESC
      

      【讨论】:

        猜你喜欢
        • 2021-10-11
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 2012-08-25
        • 2012-03-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多