【问题标题】:How can I create this mysql "SELECT" query?如何创建这个 mysql“SELECT”查询?
【发布时间】:2016-01-08 05:50:34
【问题描述】:

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

谁能告诉我如何创建这个选择查询?

谢谢。

【问题讨论】:

  • category_id 2 的子类别是 22、23 和 24?
  • 没有。 3,4,5,6,7,8 是 category_id 2 的子类别。您可以在我的问题中看到类别的数据。谢谢。

标签: php mysql select


【解决方案1】:

试试这个。

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】:

    您可以使用子查询来获取 category_id 值,其 parent2

    SELECT * 
    FROM products
    WHERE category_id = 2 OR 
          category_id IN (SELECT category_id
                          FROM categories
                          WHERE parent = 2)
    ORDER BY added_date DESC
    

    【讨论】:

      【解决方案3】:
      SELECT * 
      FROM products
      WHERE category_id = 2 OR 
            category_id IN (SELECT category_id
                            FROM categories
                            WHERE parent = 2)
      ORDER BY added_date DESC
      

      【讨论】:

      • 恐怕这是一个重复的答案。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 2021-07-08
        相关资源
        最近更新 更多