Не приводите строку таблиц - PullRequest
0 голосов
/ 28 декабря 2011

Хорошо, давайте приступим к делу ...

скажем, у меня есть категория (categoyid) '150', и я не приведу ничего, что находится в этой категории .....

Оказывается, статья может быть в нескольких категориях, и чем больше я блокирую 150 в категории SELECT, тем не менее она будет связана с другими категориями ....

Как мне это сделать, чтобы любаяпункт в категории '150' не ищется в SELECT, хотя он был и в другой категории, кроме '150' ...

Таблицы:

node

nodeid
contentid
url
publishdate

nodeinfo

nodeid
title

node_category

categoryid
nodeid

article

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

1 Ответ

1 голос
/ 28 декабря 2011

Я думаю, что вам нужно несуществующее предложение:

 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

Это должно отфильтровывать узлы, которые относятся к одной из выбранных категорий, но не относятся к тем, которые указаны в предложении несуществующего.

...