字符串上的where子句而不是id

时间:2015-12-01 19:48:31

标签: mysql

如果属于类别或子类别,我需要从我的数据库中获取所有文章。

文章:

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查询查询的情况下执行此操作?

2 个答案:

答案 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)

您可以控制行的父级标题是否与特殊标题匹配。可能有更有效的方法,但这种设计与你的非常相似。