MySQL:抢在另一个表中找不到ID的行

时间:2019-03-26 23:52:47

标签: mysql

希望这很有意义,对此很不好。

这是问题所在:我正在尝试从“文章”表中获取帖子列表,并且每篇文章在另一个名为“ article_category_reference”的表中均具有与之相关联的标签列表。

用户会阻止某些标签以自定义其供稿,因此我想将它们过滤掉。这些将位于一个数组中((12和19是标签ID)):

$in = [0 => 12, 1 => 19];

这是当前的示例MySQL:

SELECT a.`article_id`,
       a.`title`,
       a.`text`
FROM   `articles` a
       LEFT JOIN `article_category_reference` r
              ON r.article_id = a.article_id
WHERE  r.category_id NOT IN ( ?,? )
ORDER  BY a.`date` DESC
LIMIT  ?, ?  

我的问题是,如果文章只有一个标签,它将过滤掉文章,因此我完全错了。我想我不能简单地加入像这样的表进行过滤?

2 个答案:

答案 0 :(得分:1)

您可以执行嵌套查询。在MySQL上非常有用

SELECT a.`article_id`,
   a.`title`,
   a.`text`
FROM   `articles` a
   WHERE a.article_id IN ( 
         SELECT r.`article_id` 
         FROM `article_category_reference` r
         WHERE  r.category_id NOT IN ( ?,? )
);

简单来说,请转到article_category_reference获取所有ID,但使用这些ID来查询商品表。

答案 1 :(得分:-1)

您可以简单地使用逗号分隔的要过滤的值列表来构建查询,即:

WHERE  r.category_id NOT IN ( 12, 19 )

我不明白那部分,但是你说的是

  

如果文章只有一个标签,它将过滤掉

也许您可以显示一个完整的示例,其中包含查询,示例数据,获得的结果以及如果此操作不能回答您的问题,则期望的结果。