@mIndix

Как выбрать строку по определенному числу?

Запрос содержит выборку spw1.workers LIKE '%" . $arr['workerID'] . "%' or LIKE '%" . $_COOKIE['shop_id'] . "%', но поле spw1.workers (varchar) может быть равным [40] или [170, 240], при выборке через LIKE '%40%' в выборку попадут 2 записи
Как можно сделать, чтобы была запись равная только [40]?
(SELECT spw1.*, IF(spw1.status = 3, 5, 
	IF(spw1.status = 2, 4, IF(spw1.status = 0, 2, 0))) as al 
FROM SID_planerWork spw1
        WHERE spw1.type > 0 AND (spw1.workers LIKE '%" . $arr['workerID'] . "%'  
        or LIKE '%" . $_COOKIE['shop_id'] . "%'))
UNION ALL 
(SELECT spw2.*, 
	IF(spw2.data_close_worker = '0000-00-00' AND spw2.data_end_rec < now(), 3, 1) as al
FROM SID_planerWork spw2 where spw2.type = 0)
ORDER BY al desc;")
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Дружище, data quality у тебя ужасное. Такие данные не должны попадать в реляционную БД.
Лучше их как-то подчистить и нормализовать. И потом и запрос по подчищенным данным пойдет
быстрее и индекс можно построить.
Ответ написан
Комментировать
IvanU7n
@IvanU7n
выкинуть квадратные скобочки и find_in_set()

да и условие вида column like match1 or like match2 ЕМНИП не должны работать

ПС. если там исключительно числа, то можно ещё и json_contains() попробовать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы