Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 如何在groupby列产品表之前显示orderby并显示唯一和可用的产品_Php_Laravel_Subquery_Sql Order By - Fatal编程技术网

Php 如何在groupby列产品表之前显示orderby并显示唯一和可用的产品

Php 如何在groupby列产品表之前显示orderby并显示唯一和可用的产品,php,laravel,subquery,sql-order-by,Php,Laravel,Subquery,Sql Order By,我在laravel查询中遇到一个问题: 我想在同一列的分组之前按顺序排序, 例如: 产品表 id ....... cat_id ....... color_id ....... count<br> ---------------------------------------------------------<br> 1 ........... 27 ............... 3 ............... 0 <br> 2 ...........

我在laravel查询中遇到一个问题:

我想在同一列的分组之前按顺序排序, 例如:

产品表

id ....... cat_id ....... color_id ....... count<br>
---------------------------------------------------------<br>
1 ........... 27 ............... 3 ............... 0
<br>
2 ........... 27 ............... 7 ................ 3
<br>
3 ........... 27 ............... 3 ................ 10
<br>
4 ........... 27 ............... 3 ................ 2
id。。。。。。。cat_id。。。。。。。颜色标识。。。。。。。计数
---------------------------------------------------------
1.27 ............... 3.0
2.27 ............... 7.3.
3.27 ............... 3.10
4.27 ............... 3.2.
现在:我想用第一个orderby'count'来记录结果,所以groupby'cat\u id,color\u id'

id ....... cat_id ....... color_id ....... count<br>
---------------------------------------------------------<br>
3 ........... 27 ............... 3 ............... 10
<br>
2 ........... 27 ............... 7 ................ 3
id。。。。。。。cat_id。。。。。。。颜色标识。。。。。。。计数
---------------------------------------------------------
3.27 ............... 3.10
2.27 ............... 7.3.
假设您的查询

SELECT id, cat_id, color_id, count FROM products
count
是数据库中的一个值,您可以将
groupby
orderby
语句组合在一起:

SELECT id, cat_id, color_id, count FROM products GROUP BY cat_id, color_id ORDER BY count
使用此查询,许多结果都会丢失。如果您想要组合的值,比如说
count
,您可以使用
GROUP\u CONCAT

SELECT id, cat_id, color_id, GROUP_CONCAT(count) FROM products GROUP BY cat_id, color_id ORDER BY count
通过此查询,您仍将获得所有相关信息,但对于
cat\u id
列和
color\u id
列中的每个条目,您将获得一个逗号分隔的字符串,其中包含
计数
的值

以下是W3学校提供的更多信息的链接:

    • 请试试这个

      select pr_l.* 
      from products pr_l
      inner join (
           select 
           cat_id, color_id,max(count) as count 
           from products
           group by `cat_id`,`color_id`
        ) pr_r
      on pr_l.count = pr_r.count and pr_l.cat_id = pr_r.cat_id and  pr_l.color_id = pr_r.color_id   
      order by count desc
      
      通常,“分组依据”之前的“订单依据”不起作用。所以我使用了products表的内部联接

      左侧产品表具有所有记录,右侧产品表具有最大计数行,按类别id和颜色id分组

      对于laravel sql语法

      $products = $products->select(DB::raw('pr_l.*'))->from(
      DB::raw('inner join (
       select 
       cat_id, color_id,max(count) as count 
       from products
       group by `cat_id`,`color_id`
      ) pr_r')
      )->where(pr_l.count = pr_r.count and pr_l.cat_id = pr_r.cat_id and  pr_l.color_id =   pr_r.color_id)->orderBy('count', 'desc');
      
      如何转换:

      select l.* 
      from products l
      inner join (
           select 
           cat_id, color_id,max(count) as count 
           from products
           group by `cat_id`,`color_id`
        ) r
      on l.count = r.count and l.cat_id = r.cat_id and  l.color_id = r.color_id   
      order by count desc
      
      要使用类似于“向下”的语法,请执行以下操作:

      $products = $products->select(DB::raw('l.*'))->from(
          DB::raw('inner join (
           select 
           cat_id, color_id,max(count) as count 
           from products
           group by `cat_id`,`color_id`
        ) r')
      )->where(l.count = r.count and l.cat_id = r.cat_id and  l.color_id = r.color_id)->groupBy(['products_id','color'])->orderBy('count', 'desc');