Поиск строки в предыдущей итерации

182
31 декабря 2018, 06:00
$strFindInSet = 'FIND_IN_SET';
    $iteration = 0;
    foreach ($userRow["cur_hars"] as $key => $curHar) {
        if ($iteration == 0) {
            $strFindInSet = $strFindInSet . '(' . $curHar["value"] . ',`' . $curHar["id"] . '`' . ')';
        } else {
            $strFindInSet = $strFindInSet . ' AND FIND_IN_SET(' . $curHar["value"] . ',`' . $curHar["id"] . '`' . ')';
        }
        $iteration++;
    }
    $ifress = $db->rawQuery('SELECT * from alice5_ifress where ' . $strFindInSet . '');

Формирую запрос в цикле с FIND_IN_SET в котором устанавливаю необходимые характеристики для поиска, проблема в том что мне нужно проверять значение $curHar["id"] текущей итерации со значением $curHar["id"] предыдущей итерации и если условие выполняется, то я пишу не AND, а OR и оборачиваю в скобки FIND_IN_SET предыдущей итерации и FIND_IN_SET текущей итерации, как такое вообще выполнить??? Т.е. получается что-то вроде:

SELECT * from alice5_ifress where FIND_IN_SET (55,`10`) AND FIND_IN_SET(76,`42`) AND FIND_IN_SET(80,`59`) AND ( FIND_IN_SET(53,`8`) OR FIND_IN_SET(83,`8`))
Answer 1

Такое решается в 2 прохода. На первом идет группировка по id, а на втором уже формируем запрос

$clauses = [];
foreach ($array as $current) {
   $clauses[$current["id"]][] = 'FIND_IN_SET((' . $curHar["value"] . ',`' . $curHar["id"] . '`' . ')';
}
$where = '';
foreach($clauses as $clause) {
    if ($where) {
        $where .= " AND "; 
    }
    if (count($clause) > 0) {
        $where .= '(' . implode(' OR ', $clause) . ')';
    } else {
        $where .= $clause[0];
    }
}

UPD: исправил ответ после замечания

READ ALSO
Отправка Ajax запроса в модуль OpenCart

Отправка Ajax запроса в модуль OpenCart

Как передать POST параметр через ajax в файл controller модуля OpenCart ?

186
Визуализация сортировки по шагам

Визуализация сортировки по шагам

Я делаю визуализатор сортировки на c++, можно ли используя обычные алгоритмы сортировки пошагово отсортировать массив, те

483
Некорректное чтение условий в цикле while

Некорректное чтение условий в цикле while

В первой строчке условие после && полностью игнорируется, в при вынесении ! за скобку, как во второй строчке, оно учитываетсяКто знает,...

168
Как найти базовый адрес?

Как найти базовый адрес?

как мне найти базовый адрес указателя вида "serverdll"+0066CAA ?

209