【问题标题】:Returning Array in mysql Select在mysql Select中返回数组
【发布时间】:2016-11-09 00:07:00
【问题描述】:

我正在尝试按型号和制造商名称对库存结果进行分组,显示匹配的商品数量和每个分组的 1 个结果。话虽如此,我想尝试检索组内的所有库存 ID。想知道这是否可能...有什么想法吗?

仅供参考 - 我正在使用 Laravel,有问题的行是 ->selectRaw(CambridgeID as CambridgeIDArray)

$getMatchingInventory = DB::table('inventory')
                                ->selectRaw('*, count(*) as groupTotal')
                                ->whereRaw("MATCH(ManufacturerNameMatch, SubCategoryNameMatch, MainCategoryNameMatch, Model_Name, Title_Override, Description_Old) AGAINST ('$final' IN BOOLEAN MODE)")
                                ->selectRaw('CambridgeID as CambridgeIDArray')
                                ->groupBy('Model_Name', 'ManufacturerNameMatch')
                                ->having('Units_OnHand', '>=', '1')
                                ->orderBy('ManufacturerNameMatch')
                                //->paginate(15);
                                ->get();

【问题讨论】:

  • 你不能把Units_OnHand 放在WHERE 语句中吗,顺便说一句?请参阅下面的答案(GROUP_CONCAT 是您正在寻找的内容)。
  • @ldg 谢谢你的建议,这有助于清理一下。
  • 它也应该稍微快一点,就像按 id 而不是字符串分组并在这些列上创建复合索引一样,这取决于您的数据库的大小和需求。

标签: php mysql arrays laravel


【解决方案1】:

您应该可以使用GROUP_CONCAT,请参阅:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

您可以使用指定的输出格式选项(例如,SEPARATOR)并根据需要在GROUP_CONCAT 中使用额外的字符串操作。

(仅供参考,至少对于这个问题,使用原始 MySQL 会更容易解析。)

【讨论】:

  • 再次感谢您的文档和有用的回复。
【解决方案2】:

试试这个

$getMatchingInventory = DB::table('inventory')
                            ->select(DB::raw("GROUP_CONCAT(CambridgeID) as `CambridgeIDArray`, count(*) as `groupTotal`"))
                            ->whereRaw("MATCH(ManufacturerNameMatch, SubCategoryNameMatch, MainCategoryNameMatch, Model_Name, Title_Override, Description_Old) AGAINST ('$final' IN BOOLEAN MODE)")
                            ->groupBy('Model_Name', 'ManufacturerNameMatch')
                            ->having('Units_OnHand', '>=', '1')
                            ->orderBy('ManufacturerNameMatch') 
                            ->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2012-12-02
    • 2014-05-25
    • 2012-01-04
    • 2020-07-02
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多