0

私が欲しいのは、この新しいテーブルに表示されるオファーをフィルタリングする(取得しない)ことです。これは、ブラックリストのように使用します(つまり、ドメインXの場合、オリジンYのオファーは必要ありません)。

TABLE:      black_list_deals

COLUMNS: id 
         domain_id (we save here an id from the table "domain")
         origin_offer (we save here a value from deal, the field deal_source_id)

これまでこの命令を使用していましたが、ブラックリストテーブルに応じてフィルタリングする新しい動作を追加して、これらのオファーをフィルタリングする必要があります。

SELECT
    a.lat,
    a.lon,
    a.id,
    a.image,
    a.link,
    a.deal_source_id,
    a.date_posted,
    a.date_expires,
    a.tags_external,
    a.tags_internal,
    a.gender,
    a.price,
    a.discount,
    a.areas,
    a.hits,
    a.bias,
    a.collection_type,
    a.uniqueness,
    a.date_posted = current_date AS today,
    DATEDIFF( a.date_expires, current_date) AS days_remaining,
    a.collection_type,
    b.id AS area_id,
    b.area,
    a.image_thumb,
    c.source_img_email,
    c.source_price,
    c.source_img_sm,
    c.source_name,
    c.frame,
    a.date_posted = current_date AS today,
    d.country,
    d.region,
    e.level1,
    e.level2,
    e.level3,
    e.level4

FROM deal a
      LEFT JOIN area b ON (a.areas = b.id)
      LEFT JOIN deal_source c ON (a.deal_source_id = c.id)
      LEFT JOIN deal_travel d ON (a.id = d.deal_id)
      LEFT JOIN deal_travel_country e ON (d.country = e.id)
WHERE
      a.validated = 'y' AND
      a.date_posted = current_date AND
      a.date_expires >= current_date AND
      email_deal = '1'
4

2 に答える 2

3

WHERE a.deal_source_id NOT IN (SELECT origin_offer FROM black_list_deals)WHERE句に追加すると、これを解決できるはずです。

于 2013-01-15T01:32:43.567 に答える
1

追加します

SELECT
   ...
FROM deal a
...
   LEFT JOIN black_list_deals bld ON (bld.origin_offer = a.deal_source_id)
...
WHERE
...
   AND bld.id IS NULL

基本的に、ブラックリストにエントリが見つからないデータのみを返します

于 2013-01-15T01:46:21.803 に答える