Mysql 不要带一排桌子

Mysql 不要带一排桌子,mysql,sql,categories,Mysql,Sql,Categories,好吧,让我们谈正事吧 假设我有一个类别(categoyid)'150',并且不会带任何属于该类别的东西 事实证明,一篇文章可能有多个类别,我在类别选择中选择的150越多,它仍然会链接到其他类别 我该如何做,以便“150”类别中的任何项目都不会在选择中被寻找,即使他也在“150”之外的其他类别中 表: 节点 nodeinfo node\u类别 文章 ===================== 我试过: SELECT p.nodeid, p.contentid p.publishdate, p.ur

好吧,让我们谈正事吧

假设我有一个类别(categoyid)'150',并且不会带任何属于该类别的东西

事实证明,一篇文章可能有多个类别,我在类别选择中选择的150越多,它仍然会链接到其他类别

我该如何做,以便“150”类别中的任何项目都不会在选择中被寻找,即使他也在“150”之外的其他类别中

表:

节点
nodeinfo
node\u类别
文章
===================== 我试过:

SELECT p.nodeid, p.contentid p.publishdate, p.url, c.categoryid, c.nodeid, a.previewimage, a.contentid, e.title FROM `node` AS p 
INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` 
INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` 
INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` 
WHERE c.`categoryid` 
IN (73,74,77,105,71,70,72,76,100,80,79,78,81,108,145,146,82,142,83,97,153) 
GROUP BY c.nodeid 
ORDER BY p.`publishdate` 
DESC LIMIT 4

我认为您需要一个not exists条款:

 AND NOT EXISTS (
  SELECT 1
  FROM 
   `nodecategory` AS ic
  WHERE
   p.`nodeid` = ic.`nodeid`
   AND ic.`categoryid` IN (150)
 )
在您的查询中,它重新格式化了一点:

SELECT 
 p.nodeid, 
 p.contentid,
 p.publishdate, 
 p.url, 
 c.categoryid, 
 c.nodeid, 
 a.previewimage, 
 a.contentid, 
 e.title 
FROM 
 `node` AS p 
 INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` 
 INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` 
 INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` 
WHERE c.`categoryid` 
 IN (73,74,77,105,71,70,72,76,100,80,79,78,81,108,145,146,82,142,83,97,153) 
 AND NOT EXISTS (
  SELECT 1
  FROM 
   `nodecategory` AS ic
  WHERE
   p.`nodeid` = ic.`nodeid`
   AND ic.`categoryid` IN (150)
 )
GROUP BY c.nodeid 
ORDER BY p.`publishdate` 
DESC LIMIT 4

这将过滤掉所选类别中的节点,但这些节点不在not exists子句中指定的类别中。

很高兴您发布了表名和列。。但是如果您可以发布一些数据,那就更好了。发布中的表名node_类别与SQL中引用的不匹配。
contentid
previewimage
SELECT p.nodeid, p.contentid p.publishdate, p.url, c.categoryid, c.nodeid, a.previewimage, a.contentid, e.title FROM `node` AS p 
INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` 
INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` 
INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` 
WHERE c.`categoryid` 
IN (73,74,77,105,71,70,72,76,100,80,79,78,81,108,145,146,82,142,83,97,153) 
GROUP BY c.nodeid 
ORDER BY p.`publishdate` 
DESC LIMIT 4
 AND NOT EXISTS (
  SELECT 1
  FROM 
   `nodecategory` AS ic
  WHERE
   p.`nodeid` = ic.`nodeid`
   AND ic.`categoryid` IN (150)
 )
SELECT 
 p.nodeid, 
 p.contentid,
 p.publishdate, 
 p.url, 
 c.categoryid, 
 c.nodeid, 
 a.previewimage, 
 a.contentid, 
 e.title 
FROM 
 `node` AS p 
 INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` 
 INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` 
 INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` 
WHERE c.`categoryid` 
 IN (73,74,77,105,71,70,72,76,100,80,79,78,81,108,145,146,82,142,83,97,153) 
 AND NOT EXISTS (
  SELECT 1
  FROM 
   `nodecategory` AS ic
  WHERE
   p.`nodeid` = ic.`nodeid`
   AND ic.`categoryid` IN (150)
 )
GROUP BY c.nodeid 
ORDER BY p.`publishdate` 
DESC LIMIT 4