假设我们有这样的数据库类别结构
# 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查询。
尽量不要使用子查询,因为它会影响加载数据的速度
也许它可以帮助
SELECT *
FROM categories c
INNER JOIN products p ON p.category_id=c.category_id
WHERE c.status = 1
这里是一个示例查询,我不使用左连接或连接,因为您需要记录存在才能获得状态。
SELECT
*
FROM
products, categories
WHERE
products.category_id = categories.category_id
AND status = '1'
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
首先,您必须获得所有活动类别
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
所以你们两个都是UNION
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