mysql - 标记文章选择 - 更复杂的情况(由逻辑表达式定义的标记)

标签 mysql sql select tags

我知道,选择所有带有至少一个标签“14 OR 16 OR 17”的文章很简单……(只有简单的析取)……

SELECT _article_id from articles_x_tags
WHERE _id_tag in (14,16,17)
GROUP BY _id_article

当我必须列出带有这些标签“(14 OR 16) AND (17 OR 18) AND NOT(13)”的文章时,如何做同样的事情(快速方式,并且只有一个 sql 查询)? ...(否定、连词、析取)... 感谢您的帮助和想法!


样本表:articles_x_tags

╔════════════════╦════════════════════╗
║ _id_tag(int11) ║ _id_article(int11) ║
╠════════════════╬════════════════════╣
║ 14             ║ 2566               ║
║ 17             ║ 2566               ║
║ 13             ║ 2566               ║
║ 14             ║ 2567               ║
║ 17             ║ 2567               ║
║ 14             ║ 2568               ║
║ ...            ║ ... milion records ║
╚════════════════╩════════════════════╝

最佳答案

我会使用这样的查询:

SELECT
  id_article
FROM
  articles_x_tags
WHERE
  id_tag IN (14, 16, 17, 18, 13)
GROUP BY
  id_article
HAVING
  SUM(id_tag=14 OR id_tag=16)>0
  AND SUM(id_tag=17 OR id_tag=18)>0
  AND SUM(id_tag=13)=0

关于mysql - 标记文章选择 - 更复杂的情况(由逻辑表达式定义的标记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25886928/

相关文章:

php - 计算表字段中的重复值

mysql - 来自数据库的 Deedle Frame,什么是 Schema?

php - 如何在文本开头查找短语(单词)

mysql - 如何从 2 列表转换多对多关系?

MySQL:下拉列表显示的值与发送的值不同

php - jquery-ui-1.8.14 使用 php 和 mysql 自动完成

java - (ObjectOptimisticLockingFailureException) 单个事务中的 StaleStateException

sql - SQL语法错误:“(”附近

javascript - 如何在没有 jquery 的情况下在一页上切换表单?

c - fork 后选择阅读