这不是重复问题,我已经阅读了我的搜索标题中提到的所有其他答案。
我的 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
它仅适用于第一个整数,不适用于任何其他整数。 示例:
如果查询是:
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
如果我使用“FIND_IN_SET(13, task_allotment
.employee_id
) 查询以“employee_id”开头的整数,您可以在上面看到“它返回正确的结果,但如果我查询任何其他整数返回空结果。我不确定是否只适用于第一个整数?
请指导我如何使用其他整数获得正确的结果。
最佳答案
看起来 employee_id
中存储的字符串不是正确的逗号分隔值,它在每个逗号后包含空格,这就是它不起作用的原因,请参阅 here .
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
将关系存储在一行中确实是一个糟糕的设计,你应该normalize您的数据并将每个元组(task_id、employee_id)保存在称为联结/数据透视表的新表中的一行中,这样您就不会遇到这些问题
关于php - MySQL FIND_IN_SET OR IN 仅适用于第一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51078787/