我有一个2类系统,基本上我想做的是我有2个表,top_category和bottom_category,我创建了侧边栏,它将使用sql查询列出所有产品。有没有一种方法可以在一个sql查询中提取top_category和bottom_category数据,并按top_category的外键ID对bottom_category进行排序,因此当我在列表中循环它们时,它们最终会出现在正确的嵌套中?

这是我的桌子

CREATE TABLE top_category (
  id INT PRIMARY KEY,
  NAME VARCHAR(100)
);

CREATE TABLE bottom_category (
  id INT PRIMARY KEY,
  NAME VARCHAR(100) ,
  top_category_id INT REFERENCES top_category
);


这是我的产品表,因此当我单击bottom_category链接时,我希望它列出链接到bottom_category_id的产品:

create table product (
  id int primary key,
  name varchar(100) ,
  bottom_category_id int references bottom_category
);

最佳答案

你可以写类似

SELECT product.*, bottom_category.name, top_category.name
FROM product
LEFT JOIN bottom_category ON bottom_category.id = product.bottom_category_id
LEFT JOIN top_category ON top_category.id = bottom_category.top_category_id
ORDER BY top_category.id,bottom_category.id


但是,如果您有非常大的表,则只需忽略第三个范式,然后将类别名称添加到产品表即可。但前提是您的分类表很大。

UPD
添加ORDER BY

关于php - 连接具有外键ID的2个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18150831/

10-11 01:36