MySQL FIND_IN_SET ИЛИ IN работают только для первого целого числа? - PullRequest
0 голосов
/ 28 июня 2018

Это не повторяющийся вопрос, и я прочитал все другие упоминания ответов в заголовке моего поиска.

У меня есть запрос MySQL, который должен найти целочисленное значение из поля таблицы ' employee_id '.

Мой стол: enter image description here

Мой запрос:

SELECT `task_allotment`.`task_id`, `task_allotment`.`sub_proj`, `task_allotment`.`project_id`, `task_allotment`.`task_name`, `task_allotment`.`task_date`, `task_allotment`.`task_status`, `task_allotment`.`assign_by`, `project`.`provider_id` FROM `task_allotment` INNER JOIN `project` ON `task_allotment`.`project_id` = `project`.`project_id` WHERE FIND_IN_SET(9, `task_allotment`.`employee_id`) && `task_allotment`.`task_status` !="Complete" ORDER BY `task_allotment`.`task_id` DESC

Возвращает пустой результат: enter image description here

Он работает только для первого целого числа, но не работает с любым другим целым числом. пример:

если запрос:

SELECT `task_allotment`.`task_id`, `task_allotment`.`sub_proj`, `task_allotment`.`project_id`, `task_allotment`.`task_name`, `task_allotment`.`task_date`, `task_allotment`.`task_status`, `task_allotment`.`assign_by`, `project`.`provider_id` FROM `task_allotment` LEFT JOIN `project` ON `task_allotment`.`project_id` = `project`.`project_id` WHERE FIND_IN_SET(1, `task_allotment`.`employee_id`) && `task_allotment`.`task_status` !="Complete" ORDER BY `task_allotment`.`task_id` DESC

возвращает правильный результат: enter image description here

Вы можете видеть выше, если я запрашиваю с целым числом, что начало с " employee_id ", используя "FIND_IN_SET (13, task_allotment. employee_id)", это возвращает правильный результат, но если я запрашиваю хоть какой-нибудь другое целое число возвращает пустой результат. Я не уверен, если работать только для первого целого числа?

Пожалуйста, подскажите, как получить правильный результат, используя другое целое число

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Похоже, строка, хранящаяся в employee_id, не является правильным значением, разделенным запятыми, она содержит пробелы после каждой запятой, поэтому она не будет работать, см. здесь .

SELECT FIND_IN_SET(5, '1, 2, 4, 5, 6'); // returns 0
SELECT FIND_IN_SET(CONCAT(' ',5), '1, 2, 4, 5, 6'); // returns index 4 but won't work for first value
FIND_IN_SET(1, REPLACE('1, 2, 4, 5, 6', ', ',',')) //  returns index 1, this will for all values

Это действительно плохой дизайн для хранения отношений в одной строке, вам следует нормализовать ваших данных и сохранять каждый кортеж (task_id, employee_id) в одной строке в новой таблице, которая называется соединительной / сводной таблицей, поэтому у вас не возникнет этих проблем

0 голосов
/ 28 июня 2018

Если у вас есть пробелы в целых числах, как, я вижу 1, 2, 4, 5, 7,.., то это не будет работать. У меня была такая же проблема.

Решение: ЗАМЕНА Функция в MySQL может помочь. Просто замените все пробелы в этом конкретном поле пустой строкой ''.

UPDATE `TABLENAME` SET `employee_id` = REPLACE(`employee_id`, ' ', '')

Примечание: В следующий раз будьте осторожны, сохраняя значения с пробелами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...