0

このクエリは処理および実行中ですが、NOTINセクションを完全に無視しています。

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
4

2 に答える 2

2

「notin」クエリは何も返さない可能性があります。

すべきではない

where offer_id='o.id'

なれ

where offer_id=o.id

于 2013-01-12T01:18:58.023 に答える
0

guidoに答えがあります...相関サブクエリを作成するつもりだったようです。 'o.id'文字通りに見られています。

いくつかの注意:

NOT IN通常、述語のサブクエリがNULL値を返さないという何らかの保証が必要です。データベースからその保証が適用されていない場合はWHERE/HAVING return_expr IS NOT NULL、サブクエリにを追加するだけでその保証が得られます。

その相関サブクエリは、大規模なセットで、パフォーマンスの面であなたの昼食を食べます。そのORDERBYrand()もそうです。

一般に、反結合パターンは、大規模なセットではるかに効率的であることがわかります。

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
于 2013-01-12T01:25:46.973 に答える