[英]get only one row from products table for each category row with category name included
我有两个表的产品和类别。 1类有很多产品。 在索引页面上,我只想显示一个属于每个类别的最新产品。 换句话说,一种产品属于一种类别。
这是我的表结构类别表
产品表
我尝试了许多答案,但无法理解他们的回答。 因此,plz建议我查询并在可能的情况下进行详细说明。
尝试使用SQL JOINS。 像这样的东西
SELECT cat.category_name,pro.sub_categories FROM Category AS cat INNER JOIN product AS pro ON cat.Id=pro.Id WHERE cat.Id=1
另外,在执行此操作之前,请确保您在products
表中具有category id
,否则JOIN ON
条件将不起作用。
由于mysql不支持窗口功能,我只能建议这样做,希望在product_table中没有两个具有相同日期的产品。 因为我没有可用的运行mysql,所以我不确定这是否可行。
select c.category_name
, p.product_name
, p.color
, p.category_id
, p.sub_categories
, p.detail
, p.[date]
, p.[id]
, p.bst_seller
, p.size
from products p
join ( select category_id
, max([date])
from product_table
) d
on p.[date] = d.[date]
join category_table
on p.category_id = c.[id]
尝试使用row_number窗口函数选择每个类别的最新产品,然后加入:
with products as ( select product_name , color , category_id , sub_categories , detail , [date] , [id] , bst_seller , size , ROW_NUMBER() over (partition by category_id order by date desc) as cand from product_table ) select c.category_name , p.product_name , p.color , p.category_id , p.sub_categories , p.detail , p.[date] , p.[id] , p.bst_seller , p.size from products p join category_table c on p.category_id = c.id where p.cand = 1
经过一整天的努力,我自己得到了:)
SELECT category_id, product_name
FROM products
GROUP BY category_id
它产生了我想要的东西,以下
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.