Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-根据Laravel中的相似id对记录进行分组_Php_Mysql_Laravel 5_Group By - Fatal编程技术网

Php Laravel-根据Laravel中的相似id对记录进行分组

Php Laravel-根据Laravel中的相似id对记录进行分组,php,mysql,laravel-5,group-by,Php,Mysql,Laravel 5,Group By,如何在Laravel中基于相似id对表记录进行分组 例如: 在mysql产品表中,有以下具有相似cat id的记录 表名:产品 id:1 pro_name:xyz1 cat_id:55 id:2 pro_name:xyz2 cat_id:22 id:3 pro_name:xyz3 cat_id:55 id:4 pro_name:xyz4 cat_id:22 我正在尝试做的是为类似的cat_id创建它的数组。我试着用 $all = Products::groupBy('cat_id')-

如何在Laravel中基于相似id对表记录进行分组 例如: 在mysql产品表中,有以下具有相似cat id的记录 表名:产品

id:1 pro_name:xyz1 cat_id:55
id:2 pro_name:xyz2 cat_id:22
id:3 pro_name:xyz3 cat_id:55
id:4 pro_name:xyz4 cat_id:22
我正在尝试做的是为类似的cat_id创建它的数组。我试着用

    $all = Products::groupBy('cat_id')->get();
但它只显示每个相似cat_id的第一条记录

我得到的输出:

  {
    "id": 1,
    "pro_name": "xyz1",
    "cat": "55",
    "created_at": "2017-02-09 13:09:13",
    "updated_at": "2017-02-18 11:56:04"
  },
  {
     "id": 2,
    "pro_name": "xyz2",
    "cat": "22",
    "created_at": "2017-02-22 06:04:23",
    "updated_at": "2017-02-22 06:04:23"
  }
我希望它应该在一个数组中显示所有具有相似id的记录 帮我做这个

你可以试试这个

$info = DB::table('Products')
         ->select('cat_id', DB::raw('count(*) as total'), 
             DB::raw("GROUP_CONCAT(pro_name) AS product_name"))
         ->groupBy('cat_id')
         ->get();

Group by使用给定的参数总结您的表格(因此它仅显示第一个参数,在Naincy的回答中,会计算分组元素的总数)

也许你在找我的订单

$info = DB::table('Products')
     ->orderBy('cat_id')
     ->get();
您将从整个表中获得结果,并按
cat\u id
进行排序,并且必须在手动更改类别时进行检测

另一种方法是获取不同的cat_id,然后对它们运行您自己的查询。您可以将代码封装在模型或存储库中。注意,这将在您的数据库上运行许多查询,这可能不是最好的

//Create an array
$groups = []

//Retrieve the list of cat_id's in use.
$cats = DB::table('Products')->distinct()->select('cat_id')->get()

//for each cat_id in use, find the products associated and then add a collection of those products to the relevant array element
foreach($cats as $cat){
    $groups[$cat->cat_id] = DB::table('Products')->where('cat_id', $cat->cat_id)->get();
}

注意:我唯一关心的是你在这里做什么,你真的在寻找关系吗?如果您使用了,所有这些都会变得非常简单。

您应该试试这段代码

$row = Products::selectRaw("pro_name,cat_id")->groupBy("cat_id","pro_name")->get();
            
echo "<pre>";
print_r($row);
$row=Products::selectRaw(“专业名称,专业名称”)->groupBy(“专业名称”,“专业名称”)->get();
回声“;
打印(行);

您是否可以共享所需的结果。可以使用GROUP_CONCAT,但要进入同一数组,您需要运行单独的查询。它将输出显示为“{”cat_id:“22”,“total:“2”},{”cat_id:“55”,“total:“2”},`@NaincyYes它显示,对于cat_id,您有2条记录,对于55,您也有2条记录,但我希望所有字段都不是总数@Naincyi如果你要按分组,它不会给你列……那么你需要阅读有关正确使用分组的信息。如果你只想按类别分组的产品名称,那么你可以使用group_concat,稍后在php中你可以用更新的我的答案分解它们