MYSQL-SELECT产品的parent_category处于活动状态

时间:2019-02-25 15:02:26

标签: php mysql categories parent

假设我们具有这样的数据库类别结构

# Categories Table
| category_id | parent_category_id | status |

# Products Table
| product_id | category_id |

仅在parent_category_id具有有效的status = 1的情况下,如何获得类别的产品列表?

我想我可以在SELECT语句中使用一些子查询,但是我不知道该怎么做! :(

类似:

SELECT p.*, (SELECT * FROM ? WHERE ? ) AS x 
FROM products AS p 
    LEFT JOIN categories AS c ON p.category_id = c.category_id 
WHERE ... 
AND p.product_id = '?' 
AND ...

预先感谢您的任何建议!

  

注意:我使用PHP作为后端语言,以防万一我需要某种形式   数据操作传递给mysql查询。

4 个答案:

答案 0 :(得分:0)

尝试不使用子查询,因为它会影响加载数据的速度

也许可以帮忙

SELECT *
FROM categories c
INNER JOIN products p ON p.category_id=c.category_id
WHERE c.status = 1

答案 1 :(得分:0)

SELECT p.* FROM products p
INNER JOIN categories child ON child.category_id = p.category_id
INNER JOIN categories parent ON parent.category_id = child.parent_category_id
WHERE parent.status=1

答案 2 :(得分:0)

这里有一个查询示例,我不使用左联接或联接,因为您需要记录存在才能获取状态。

SELECT 
   *
FROM
   products, categories
WHERE
   products.category_id = categories.category_id
   AND status = '1'

答案 3 :(得分:0)

首先,您必须获得所有活动类别

SELECT child.*
FROM Categories child
JOIN Categories parent
  ON child.parent_category_id = parent.category_id 
 AND parent.status = 1

但是您还需要不具有parent_id的根类别

SELECT *
FROM Categories
WHERE parent_category_id IS NULL
  AND status = 1

所以你们两个都团结起来

SELECT *
FROM Categories child
JOIN Categories parent
  ON child.parent_category_id = parent.category_id 
 AND parent.status = 1

UNION ALL

SELECT *
FROM Categories
WHERE parent_category_id IS NULL
  AND status = 1

现在您可以获得这些类别的产品

SELECT *
FROM (  ... UNION ALL ... ) active_categories
JOIN Products
 ON active_categories.category_id = Product.category_id