我有一个白名单和一个分类UID的黑名单。
我想告诉MySQL
通常,我会说"IN (57 )“不包括所有其他东西,比如206,但是某些页面同时包含(57和206),所以这两者都是正确的。不需要的206页仍然包括在内。
以下是查询:
SELECT pages.uid, pages.title
FROM pages
LEFT JOIN sys_category_record_mm AS cats ON (pages.uid = cats.uid_foreign AND cats.tablenames="pages" AND cats.fieldname="categories")
WHERE pages.hidden=0 AND pages.deleted=0
AND cats.uid_local IN (57)
AND cats.uid_local NOT IN (206)
ORDER BY (CASE WHEN pages.starttime > 0 THEN pages.starttime ELSE pages.crdate END) DESC
LIMIT 10以下是解决此问题的DB Fiddle:
https://www.db-fiddle.com/f/fxGQbBVZHb8aJDJ4eiTUW1/0
我没有主意了。任何帮助/暗示都将不胜感激。
发布于 2018-07-12 15:35:12
对于group by和having,我发现这种逻辑最简单。
select c.uid_foreign
from sys_category_record_mm c
where c.tablenames = 'pages' AND c.fieldname = 'categories'
group by c.uid_foreign
having sum(c.uid_local in (57)) > 0 and
sum(c.uid_local in (206)) = 0;您可以重新加入到您的页面以获得更多信息。
https://stackoverflow.com/questions/51309519
复制相似问题