MySQL FIND_IN_SET ИЛИ IN работают только для первого целого числа?

0

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

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

Моя таблица: Изображение 174551

Мой запрос:

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

Он возвращает пустой результат: Изображение 174551

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

если 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

Он возвращает правильный результат: Изображение 174551

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

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

Теги:
mysqli

2 ответа

2

Похоже, что строка, хранящаяся в 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
    Спасибо за ваше полезное предложение. да, я сделал очень плохой дизайн, я все сделаю правильно. Я принимаю ваш ответ, потому что он возвращает правильный результат.
  • 0
    @KuntalParbat вам нужно использовать сначала заменить ваш столбец, а затем вы можете найти в наборе, см. Обновленную демонстрацию
Показать ещё 2 комментария
0

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

Решение: REPLACE функции в MySQL может помочь. Просто замените все пробелы в этом конкретном поле пустой строкой ''.

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

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

  • 0
    Это решение работает для меня. Мне нужно удалить место, прежде чем сохранить правильно?
  • 0
    Поскольку вы заменили пробелы в базе данных, теперь новые записи должны сохраняться без пробелов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню