如何创建这个mysql“SELECT”查询?

时间:2015-10-10 09:38:21

标签: php mysql select

我有两个名为'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,那么我需要获得所有产品,包括其子类别。

有人能告诉我如何创建这个选择查询吗?

谢谢。

4 个答案:

答案 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_idparent的{​​{1}}值:

2

答案 3 :(得分:0)

以上所有答案都适用,但仅限于一个级别的类别。如果您需要子子类别,那么我建议使用名为MPTT的内容。这将需要您的类别数据库表中的2个新字段(通常称为leftright)。