此查询正在处理和运行,但它完全忽略了NOT IN部分
SELECT * FROM `offers` as `o` WHERE `o`.country_iso = '$country_iso' AND `o`.`id`
not in (select distinct(offer_id) from aff_disabled_offers
where offer_id = 'o.id' and user_id = '1') ORDER by rand() LIMIT 7
答案 0 :(得分:2)
也许您的“不在”查询中不会返回任何内容。
不应该
where offer_id='o.id'
是
where offer_id=o.id
答案 1 :(得分:0)
guido有答案......看起来你打算创建一个相关的子查询。 'o.id'
被视为文字。
一些小心:
您通常需要某种保证NOT IN
谓词中的子查询不返回NULL值。如果您没有从数据库强制执行该保证,则在子查询中添加WHERE/HAVING return_expr IS NOT NULL
就足以为您提供该保证。
那个相关的子查询将在大型集合中吃掉你的午餐,表现明智。和ORDER BY一样rand()。
通常,反连接模式在大型集合上效率更高:
SELECT o.*
FROM offers o
LEFT
JOIN aff_disabled_offers d
ON d.user_id = '1'
AND d.offer_id = o.id
WHERE d.offer_id IS NULL
AND o.country_iso = '$country_iso'
ORDER BY rand()
LIMIT 7