Вопрос: Как сделать так, чтобы SQL автоматически настраивался на длину массива и делал оператор «И НРАВИТСЯ» для каждого значения массива?
В основном я пытаюсь сделать следующее динамическое: (я использую MySQL 5.6.17)
поэтому код будет
SELECT ... WHERE .. AND AO LIKE '%$descr[0]%' AND AO LIKE '%$descr[1]%' AND AO LIKE '%$descr[2]%'
Приведенный выше код будет работать нормально, я пропустил ненужные биты. Единственная проблема в том, что я не знаю, сколько у меня будет элементов массива, поэтому я не могу просто создать загрузку AND AO LIKE для всего … Кроме того, я не знаю, какими они будут, поскольку они определены пользователем. Я не знаю, как многим в этой динамике просто сделать ‘AND AO LIKE’ для каждого элемента в $ descr. Пожалуйста помоги.
Если это не очевидно,
АО это колонка
$ descr — это массив пользовательских ключевых слов различной длины.
Я предполагаю, что ваш $ descr будет представлен в виде массива — вам поможет что-то вроде приведенного ниже?
$descr = array(
'hello',
'world',
'foo',
'bar'
);
$sql[] = 'SELECT * FROM TABLE_NAME';
if(is_array($descr) and count($descr) > 0) {
$sql[] = 'WHERE COLUMN_NAME LIKE \'%' . array_pop($descr) . '%\'';
foreach($descr as $des) {
$sql[] = 'AND COLUMN_NAME LIKE \'%' . $des . '$\'';
}
}
echo implode(' ', $sql);
Результат: ВЫБЕРИТЕ * ИЗ TABLE_NAME, ГДЕ COLUMN_NAME НРАВИТСЯ «% bar%» И COLUMN_NAME НРАВИТСЯ «% hello $», И COLUMN_NAME НРАВИТСЯ «% world $», И COLUMN_NAME НРАВИТСЯ «% foo $»
Других решений пока нет …