MySQL只有当它们出现在某个类别表中时才从一个表中查询产品

时间:2010-01-23 17:48:52

标签: sql mysql sorting

我有以下表格:

Products:
  id, name, ...

Products_in_Categories
  id, category_id, product_id

Categories
  id, name, ...

我有一个管理页面,我希望让他按名称,目录ID等搜索产品。当然还有类别和名称以及目录ID ......

所以没有类别 - 这真的很容易。但是,当我希望搜索能够仅提取与所选类别相关的产品信息时 - 我无法弄明白。

我使用的是一些旧方法还是存储方式?我知道并使用了序列化和反序列化,但我不想在这里使用它。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

存储产品的方式没有任何问题,这三个表是存储这种关系的正确方法。

SELECT *
FROM Categories c
JOIN Products_in_Categories pic ON ( pic.category_id = c.category_id )
JOIN Products p ON ( p.id = pic.product_id )
WHERE c.name = 'YOUR_CATEGORY_NAME';

YOUR_CATEGORY_NAME替换为您搜索的类别名称。如果您希望用户只能输入名称的一部分,请将<{1}}替换为

WHERE c.name = 'YOUR_CATEGORY_NAME';

答案 1 :(得分:0)

SELECT p.* FROM products as p
LEFT JOIN Products_in_Cateogries pc ON pc.product_id = p.id,
LEFT JOIN Categories c ON c.id = pc.categroy_id
WHERE c.name = 'CATEGORY A'

您还不需要在Products_in_Categories表中拥有ID,因为category_id和product_id的组合是唯一的。