MySQL условный «not_in» на основе другого значения для разбора массива в запрос

У меня есть следующий массив

$exclude = array(1 => array(1,2,3,4), 2 => array(1,2,3,4));

Мне нужно исключить значения внутри внутреннего массива, когда ключ проверяется. Я не уверен, должен ли я использовать CASE или просто AND а также OR,

Вот начало того, что я пытался, но я что-то упустил, так как это не работает, как задумано. Я добавляю запрос в конец WHERE пункт, так что это единственная часть, к которой у меня есть доступ.

foreach($exclude as $blogID => $post_ids) {
$ids = implode(',', $post_ids);

if($blogID == 1) {
$where .= " AND table.BLOG_ID = {$blogID} AND table.ID NOT IN ($ids)";
} else {
$where .= " OR table.BLOG_ID = {$blogID} AND table.ID NOT IN ($ids)";
}
}

1

Решение

Я не уверен, не имея возможности экспериментировать с остальной частью запроса, но это может помочь добавить несколько скобок вокруг всех предложений, чтобы убедиться, что все AND и OR взаимодействуют так, как задумано. Что-то вроде этого:

if ($exclude) {
$where .= ' AND ('; // Enclose all the ORs in one set of parentheses
$or = '';
foreach($exclude as $blogID => $post_ids) {
$ids = implode(',', $post_ids);
// Each individual OR part is enclosed in parentheses
$where .= "$or(table.BLOG_ID = {$blogID} AND table.ID NOT IN ($ids))";
$or = ' OR ';
}
$where .= ")";
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector