Это не дублирующий вопрос, и я прочитал все другие ответы, упомянутые в моем названии поиска.
У меня есть запрос MySQL, который должен исправить целочисленное значение из поля таблицы " employee_id ".
Моя таблица:
Мой запрос:
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
Он возвращает пустой результат:
Он работает только для первого целого числа, но не работает с каким-либо другим целым числом. пример:
если Query:
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
Он возвращает правильный результат:
Вы можете видеть выше, если я запрашиваю с целым числом, место начало "employee_id" с помощью "FIND_IN_SET (13, task_allotment
. employee_id
)" это возвращение должного результата, но если я запрашиваю, хотя любое другое целое число возврата пустой результат. Я не уверен, что работает только для первого целого числа?
Прочтите, как я получаю правильный результат, используя другое целое число.
Похоже, что строка, хранящаяся в 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) в одной строке в новой таблице, которая называется таблицей соединения/сводной таблицы, так что у вас не будет эти проблемы
Если у вас есть пробелы в целых числах, я вижу 1, 2, 4, 5, 7,..
, тогда это не сработает. У меня была такая же проблема.
Решение: REPLACE функции в MySQL может помочь. Просто замените все пробелы в этом конкретном поле пустой строкой ''
.
UPDATE 'TABLENAME' SET 'employee_id' = REPLACE('employee_id', ' ', '')
Примечание. Будьте внимательны в следующий раз, сохраняя значения с пробелами.