这是我第二次遇到此类问题来检索数据。
CREATE TABLE `pm_projects` (
`project_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`project_name` varchar(255) NOT NULL,
`assigned_client` varchar(100) NOT NULL,
`project_detail` longtext NOT NULL,
`creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`project_status` tinyint(1) NOT NULL,
PRIMARY KEY (`project_id`),
KEY `assigned_client` (`assigned_client`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
在上表中,我有一个字段 assigned_client
,它包含分配给项目的多个客户端 ID,用逗号分隔(3,4,...
).
我正在尝试使用 JOIN
获取带有Assigned Client's Name(在我的 pm_users
表上)的结果,我尝试了以下方法:
SELECT
p.project_id, u.user_name, p.project_name,
p.creation_date, p.project_status
FROM pm_projects p
LEFT JOIN pm_users u ON u.user_id
IN (
'p.assigned_clients'
)
返回 u.user_name
字段的 NULL
值。
我是否必须更改我的架构,如果是,那么如何?
或者我正在尝试使用错误的查询?
最佳答案
您可以为此使用find_in_set
:
on find_in_set(u.user_id, p.assigned_clients) > 0;
请注意,p.assigned_clients
周围没有单引号。这是您查询中的另一个错误(但即使您将其替换为反引号,查询仍然无法正常工作)。
但是,问题出在您的表架构上。您应该有一个单独的关联表,每个用户和分配的客户一行。
尝试将所有这些都存储在一个字段中只会导致问题、过于复杂的查询以及将来的性能问题。
关于mysql - 在 mysql 中存储和获取多个 id 的最佳模式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18185836/