我有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.
有任何想法吗 ?谢谢.
不要这样做,你应该规范化你的数据库.
你想要做的是有一个表,如task
,然后task_assignee
.task_assignee
会有领域task_id
和user_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.
归档时间: |
|
查看次数: |
1078 次 |
最近记录: |