mysql query with AND, OR and NOT

后端 未结 3 1301
鱼传尺愫
鱼传尺愫 2021-01-02 22:59

Lets say I have a table of articles with as many to many relationship with topics. Each topic assigned to an article has a type field which can contain 1 of 3 v

相关标签:
3条回答
  • 2021-01-02 23:14

    The ALL and NOT parts are very simple, you just chain them with ANDs:

    SELECT X FROM Y WHERE a AND b AND c AND NOT d AND e AND NOT e.

    And the ORs go between:

    SELECT X FROM Y WHERE ((a AND b AND c) AND (d OR e OR f)) AND NOT g AND NOT h

    replace small numbers with comparisons and you're done. So if you want to do this in code, sort your conditions and then just chain them together as a String. Be careful to avoid SQL-Insertions.

    0 讨论(0)
  • 2021-01-02 23:31
    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'))
    
    0 讨论(0)
  • 2021-01-02 23:32

    If I get this correctly

        SELECT * FROM ArticleTopics where type = 'AND'
    UNION
        SELECT * FROM ArticleTopics where type = 'OR' limit 1
    

    I assume by 'any' you mean 'any one'. You can join the articles to topics yourself, that's trivial.

    0 讨论(0)
提交回复
热议问题