我有两个名为'categories'和'products'的mysql表。
这些是该表的数据。
mysql> select * from categories;
+-------------+--------+----------------------+-------------+
| category_id | parent | name | description |
+-------------+--------+----------------------+-------------+
| 1 | NULL | Products | NULL |
| 2 | 1 | Computers | NULL |
| 3 | 2 | Laptops | NULL |
| 4 | 2 | Desktop Computers | NULL |
| 5 | 2 | Tab PCs | NULL |
| 6 | 2 | CRT Monitors | NULL |
| 7 | 2 | LCD Monitors | NULL |
| 8 | 2 | LED Monitors | NULL |
| 9 | 1 | Mobile Phones | NULL |
| 10 | 9 | LG Phone | NULL |
| 11 | 9 | Anroid Phone | NULL |
| 12 | 9 | Windows Mobile | NULL |
| 13 | 9 | iPad | NULL |
| 14 | 9 | Samsung Galaxy | NULL |
| 15 | 1 | Digital Cameras | NULL |
| 16 | 1 | Printers and Toners | NULL |
| 22 | 1 | Computer Accessaries | NULL |
| 23 | 22 | USB Cables | NULL |
| 24 | 22 | Network Cables | NULL |
+-------------+--------+----------------------+-------------+
24 rows in set (0.00 sec)
mysql> select product_id, category_id from products;
+------------+-------------+
| product_id | category_id |
+------------+-------------+
| 1 | 24 |
| 2 | 6 |
| 3 | 6 |
| 4 | 6 |
+------------+-------------+
4 rows in set (0.05 sec)
现在我需要创建一个选择查询来获取每个类别的产品。我已经category_id
了。
这是我尝试的方式:
SELECT * FROM products
WHERE category_id = 6
ORDER BY added_date DESC
我的问题是,当我创建此选择查询时,如果一个类别具有其子类别,我需要所有产品。这意味着,如果category_id为2,那么我需要获得所有产品,包括其子类别。
有人能告诉我如何创建这个选择查询吗?
谢谢。
答案 0 :(得分:1)
SELECT *
FROM products
WHERE category_id = 2 OR
category_id IN (SELECT category_id
FROM categories
WHERE parent = 2)
ORDER BY added_date DESC
答案 1 :(得分:0)
试试这个。
select a.*,b.* from categories a inner join products b on a.category_id = b.category_id where a.category_id='$Category_id' or a.parent_id='$category_id'
答案 2 :(得分:0)
您可以使用子查询来获取category_id
为parent
的{{1}}值:
2
答案 3 :(得分:0)
以上所有答案都适用,但仅限于一个级别的类别。如果您需要子子类别,那么我建议使用名为MPTT的内容。这将需要您的类别数据库表中的2个新字段(通常称为left
和right
)。