Php 如何在groupby列产品表之前显示orderby并显示唯一和可用的产品
我在laravel查询中遇到一个问题: 我想在同一列的分组之前按顺序排序, 例如: 产品表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 ...........
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');