从包含类别名称的每个类别行的产品表中只获取一行

时间:2014-02-04 07:29:29

标签: php mysql sql

我有两个表产品和类别。 1类有很多产品。在索引页面上,我只想显示属于每个类别的最新产品。换句话说,一种产品属于一个类别。

这是我的表格结构 分类表

Category table

产品表 Product table

我尝试过很多答案但却无法理解他们的回答。所以plz推荐我查询,如果可能的话也详细说明。

3 个答案:

答案 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

它产生我想要的东西,以下

result