PHP从db中选择行,其中ID在ID组中找到

Man*_*era 0 php mysql

我有3个雇主ID:1,2和3.我通过在数据库中添加一行并在"for_emp"列中为每个人生成任务我插入我想要分配此任务的ID,并且可以将所有3个分隔为逗号.所以,假设我有一个任务,"for_emp"是"1,2,3",雇主ID.如果我想为ID 2选择所有任务,我是否可以从具有"1,2,3"作为ID的行中选择并在那里匹配"2"?如果没有,您如何建议我将我的emp ID插入数据库中的一行?db是MySQL.

有任何想法吗 ?谢谢.

rek*_*o_t 7

不要这样做,你应该规范化你的数据库.

你想要做的是有一个表,如task,然后task_assignee.task_assignee会有领域task_iduser_id.如果任务有例如.三个受理人(ID 1,2和3),然后您将在task_assignee表中为该行创建三行task,如下所示:

+--------+---------+
|task_id | user_id |
+--------+---------+
|   1    |    1    [
|   1    |    2    [
|   1    |    3    [
+--------+---------+
Run Code Online (Sandbox Code Playgroud)

然后,只需查询task_assignee表以查找分配给给定用户的所有任务即可.

以下是如何获取user_id 2的所有任务的示例:

SELECT t.* FROM task AS t INNER JOIN task_assignee AS ta WHERE ta.user_id = 2
Run Code Online (Sandbox Code Playgroud)

编辑.

就像一个相关的注释,即使你没有以正确的方式(我之前在我的回答中描述)这样做,用黑客这样做LIKE仍然远离最佳解决方案.如果您确实存储了逗号分隔值的列表,并且需要检查是否例如.值2在列表中,您可以使用MySQL的FIND_IN_SET函数:

SELECT * FROM task WHERE FIND_IN_SET(2, for_emp)
Run Code Online (Sandbox Code Playgroud)

但是你不应该这样做,除非你别无选择(例如,你正在使用某人糟糕的数据库设计),因为它的效率更低,并且不会让你索引员工ID.