如果属于类别或子类别,我需要从我的数据库中获取所有文章。
文章:
id | title | content | category_id (fk)
类别
id | title | parent_id
1 toys 1
2 trains 1
3 pets 3
我表演:
SELECT * FROM categories LEFT JOIN articles ON categories.id = articles.category_id WHERE categories.id = ? OR WHERE categories.parent_id = ?
上述工作,但现在我想使用类别标题而不是ID。如下所示:
SELECT * FROM categories LEFT JOIN articles ON categories.id = articles.category_id WHERE **categories.title** = ? OR WHERE ??? not sure how to handle this bit
但我不知道如何处理OR WHERE,因为我不知道类别id值。
有没有办法在不先执行类别ID查询查询的情况下执行此操作?
答案 0 :(得分:0)
首先,您可以获取父类别和父类别的子类别的类别列表,然后加入以查找匹配的文章。
SELECT * FROM(
SELECT *
FROM categories
WHERE title = 'toys'
UNION
select a.*
FROM categories a
JOIN categories b ON (a.parent_id = b.id)
WHERE b.title = 'toys'
) c
JOIN articles ON (c.id = articles.category_id);
答案 1 :(得分:0)
SELECT * FROM categories c
LEFT JOIN articles ON c.id = articles.category_id
WHERE **c.title** = ? OR
c.title IN (select title from categories ca where c.title = ? AND ca.id = c.parent_id)
您可以控制行的父级标题是否与特殊标题匹配。可能有更有效的方法,但这种设计与你的非常相似。