У меня есть следующий массив
$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)";
}
}
Я не уверен, не имея возможности экспериментировать с остальной частью запроса, но это может помочь добавить несколько скобок вокруг всех предложений, чтобы убедиться, что все 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 .= ")";
}
Других решений пока нет …