让我们说我有一个与主题有很多关系的文章表。分配给文章的每个主题都有一个type
字段,其中包含3个值AND
,NOT
和OR
中的1个。
Articles
id
....
Topics
id
....
ArticleTopics
article_id
topic_id
type
我想创建一个查询,说明返回所有文章:
ALL of the following topics: 1, 2, 3 (AND association)
AND
ANY of the following topics: 4, 5, 6 (OR association)
AND
NONE of the following topics 7, 8 (NOT association)
如何创建此查询?
提前致谢!
答案 0 :(得分:1)
ALL和NOT部分非常简单,你只需用ANDs链接它们:
选择X来自Y哪一个和b和c而不是d和e而不是e。
OR之间介于:
从Y在哪里选择X((a AND b AND c)AND(d OR e或f))而不是g而不是h
用比较替换小数字,你就完成了。 因此,如果您想在代码中执行此操作,请对条件进行排序,然后将它们链接在一起作为String。小心避免SQL插入。
答案 1 :(得分:0)
如果我能正确理解
SELECT * FROM ArticleTopics where type = 'AND'
UNION
SELECT * FROM ArticleTopics where type = 'OR' limit 1
我假设'任何'你的意思是'任何一个'。您可以自己将文章加入主题,这是微不足道的。
答案 2 :(得分:0)
SELECT a.id, a.name
FROM Articles a, ArticleTopics arto
WHERE arto.article_id = a.id
AND
((arto.topic_id = 1 AND arto.type like 'AND') AND (arto.topic_id = 2 AND arto.type like 'AND') AND (arto.topic_id = 3 AND arto.type like 'AND'))
AND
((arto.topic_id = 4 AND arto.type like 'OR') AND (arto.topic_id = 5 AND arto.type like 'OR') AND (arto.topic_id = 6 AND arto.type like 'OR'))
AND
((arto.topic_id = 7 AND arto.type like 'NOT') AND (arto.topic_id = 8 AND arto.type like 'NOT'))