Доброго всем дня!
Смотрите, есть таблица `
tasks` в БД MySQL, имеющая вид:
Обращаю внимание на поле "
participantsid", в которое заносятся ID участников задачи через запятую или без запятой, если участник один. Эта штука мне досталась по наследству.
Далее переходим к PHP.
Необходимо выбрать из таблицы ту строку, которая соответствует нескольким условиям.
$result = mysqli_query("SELECT * FROM `tasks` WHERE `id`='".$_GET['taskid']."' AND (`customerid` = '".$_GET['userid']."' OR `executorid` = '".$_GET['userid']."' OR `participantsid` LIKE '%".$_GET['userid']."%' OR (`executorid` = '0' AND `executordepid` = '".$_GET['userdep']."')) limit 1");
В запросе:
- `id` - id задачи
- `customerid` - id заказчика
- `executorid` - id исполнителя
- `participantsid` - ID участников задачи, перечисленные через запятую или без, если id один
- `executordepid` - id отдела исполнителя
Сейчас вообще не важно то, на сколько хорошо или плохо написан запрос, важно другое.
Обратите внимание на часть запроса
`participantsid` LIKE '%".$_GET['userid']."%' .
Представим, что $_GET['userid'] равен id-шнику "5544", а в поле `participantsid` нет id-шника "5544", НО ЕСТЬ "35544".
В этом случае результат запроса будет получен, поскольку "LIKE %...%" в запросе просто ищет указанную последовательность.
Вопрос заключается в том, можно ли в запросе разбить значение поля по разделителю (в нашем случае разделитель - это запятая) и перебрать среди полученных значений?
Нет, я конечно могу увеличить строки кода в PHP, получить значение поля, потом разбить его с момощью explode, потом перебирать значения массива и сравнивать, и т.д....
Но нельзя ли всё это запихать в SQL-запрос?
Спасибо.