2015-08-05 4 views
2

у меня есть мой выходной массив с именем «Feed Items» (фи):Фильтрация запросов MySQL с несколькими условиями

(
    [0] => Array 
     (
      [reg] => 2015-08-03 13:39:00 
      [id] => fd7ec4107d16b07c1a13cbdd386af8d2cb05ffca 
      [user_id] => de5fd44db1760b006b1909cf1db11a78b38e455c 
      [img] => edee88e88cf6e17732e393b5433cfd894662902e 
      [type] => new_join_ambition 
     ) 

) 

сгенерировать массив с именем «RemovedFeedItems» (RFI), который имеет следующую структуру:

(
    [0] => Array 
     (
      [object_id] => fd7ec4107d16b07c1a13cbdd386af8d2cb05ffca 
      [postee_id] => de5fd44db1760b006b1909cf1db11a78b38e455c 
      [type] => new_join_ambition 
     ) 

) 

Моя миссия состоит в том, чтобы не получить записи, которые имеют следующее условие:

ri.id == rfi.object_id && ri.user_id == rfi.postee_id && ri.type == rfi.type 

Запрос, который я использую, чтобы получить массив Кормовые Items является:

SELECT 
       i.registered AS reg, 
       a.id, 
       u.id AS user_id, 
       ui.image_id AS img, 
       'new_join_ambition' AS type, 
      FROM x_ambition_invites i 
       LEFT JOIN x_user u 
        ON i.to = u.id 
       LEFT JOIN x_user_images ui 
        ON u.id = ui.user_id 
       LEFT JOIN x_ambitions a 
        ON i.ambition_id = a.id 
      WHERE a.registered 
       BETWEEN '2014-07-21 14:25:03' AND '2015-08-05 12:04:41' 
      AND i.to != '8fa7a1679560876eaf2f8060abd916b692c719dc' 
      AND i.to IN ('de5fd44db1760b006b1909cf1db11a78b38e455c') 

Как я могу адаптировать мой запрос для выполнения условия, чтобы удалить указанную запись из FeedItems массива?

Заранее спасибо.

+0

Вы пытались добавить _AND NOT (id == object_id AND user_id == postee_id И тип == type) _ в конец предложения where - явно присвоить имена полей (a.id и т. Д.) – PaulF

+0

@ PaulF Но то, что нужно учитывать, состоит в том, что последние условия могут быть в большом массиве. Итак, как я могу по существу сделать следующее: '(a.id == $ a [n] ['object_id'] AND a. user_id == $ a [n] ['postee_id'] AND a.type == $ a [n] ['type']) 'через все индексы массива removedFeedItems – cwiggo

+1

Спасибо за разъяснение - думал, что это не будет как это было предложено. – PaulF

ответ

1

Try с инлайн таблицы:

SELECT ... FROM ... WHERE (a,b,c) NOT IN (SELECT a1, b1, c1 UNION SELECT a2, b2, c2 UNION SELECT...) 

Недостаток заключается в том, что вы должны будете построить большой строку запроса. :-(

+0

Знаете ли вы, что это единственное решение? :) – cwiggo

+0

Ум ... не уверен, но учитывая, что MySQL не поддерживает ни массивы, ни пользовательские типы данных ... Я могу " Не думай ни о чем другом. –

+0

Из корса вы можете создать и заполнить временную таблицу, но вы должны позаботиться о предотвращении параллельного доступа. Встроенные таблицы 100% потокобезопасны. –