mysql在\集中查找\还是只在第一个整数中查找?

fnx2tebb  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(253)

这不是重复的问题,我已经阅读了所有其他答案提到我的搜索标题。
我有一个mysql查询,它应该从表字段'employee\u id'中输入整数值。
我的table:

我的问题是:

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

它返回正确的结果:

如果我用整数查询“employee\u id”开头的位置,使用“find\u in\u set(13, task_allotment . employee_id )“它返回正确的结果,但如果我查询其他整数,则返回空结果。我不确定是否只适用于第一个整数?
请指导我如何使用其他整数得到正确的结果。

mtb9vblg

mtb9vblg1#

如果整数中有空格,我可以看到 1, 2, 4, 5, 7,.. ,则它将不起作用。我也有同样的问题。
solution:replace function 在mysql中可以帮助。只需用空白字符串替换该字段中的所有空格 '' .

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

注意:下次用空格保存值时要小心。

kzmpq1sx

kzmpq1sx2#

它看起来像是存储在 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\u id、employee\u id)保存在新表(称为junction/pivot table)的一行中,这样您就不会有这些问题

相关问题