我有两个表产品和类别。 1类有很多产品。在索引页面上,我只想显示属于每个类别的最新产品。换句话说,一种产品属于一个类别。
这是我的表格结构 分类表
产品表
我尝试过很多答案但却无法理解他们的回答。所以plz推荐我查询,如果可能的话也详细说明。
答案 0 :(得分:0)
尝试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
此外,请确保您在category id
表格中提及products
,否则JOIN ON
条件无效。
答案 1 :(得分:0)
由于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]
<小时/> 旧版本 - 仅适用于sql-server
尝试使用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
答案 2 :(得分:0)
Aaahhhhhh经过一整天的努力工作后,我自己得到了它:)
SELECT category_id, product_name
FROM products
GROUP BY category_id
它产生我想要的东西,以下