gpt4 book ai didi

mysql - 在 mysql 中存储和获取多个 id 的最佳模式设计

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:40 25 4
gpt4 key购买 nike

这是我第二次遇到此类问题来检索数据。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com