У меня есть следующий массив в PHP:
$arr = [1, 3, '4A', '5A', '5C', '2B', '2C', '2E'];
Каким-то образом мне нужно преобразовать этот массив в строку, которая выглядит следующим образом:
$filter = "(id like '1%') OR
(id like '3%') OR
(id like '4A%') OR
(id like '5A%' OR id like '5C%') OR
(id like '2B%' OR id like '2C%' OR id like '2E%')";
Первый символ значения массива указывает на уникальную категорию и заключен в скобки.
В конце я буду использовать это для запроса к базе данных;
$sql = "SELECT * FROM list WHERE {$filter}";
Может кто-нибудь помочь мне преобразовать этот массив в правильную строку? Каков наилучший метод для достижения этой цели?
Чтобы дать вам представление о том, что я пытаюсь:
Столбец ‘id’ в моей строке базы данных выглядит так: 1B2875. Где первый символ (1) обозначает категорию, а второй символ (B) — подкатегорию. Данный массив является результатом запроса фильтра на стороне клиента.
Вы можете использовать регулярные выражения в SQL:
SELECT * FROM list WHERE id REGEXP '^(1|3|4A|…)[0-9]+$'
Значение в скобках можно сгенерировать с помощью функции PHP implode('|', $filter_strings)
Обратите внимание, что сначала вы должны проверить и удалить строки фильтра, чтобы пользовательский ввод не мог манипулировать запросом. Функция preg_quote
здесь полезно
Других решений пока нет …