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

标签 mysql database-schema

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

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/

相关文章:

mysql - SQLSTATE[HY000] [2003] 无法连接到 '127.0.0.1' (13) 上的 MySQL 服务器

sql - 总是运行带有 failOnError ="false"的 Liquibase changeSet?

python - 有没有办法从 python 中获取数据库的模式?

mysql - 为单词搜索设置易于搜索的 MySQL 数据库

PHP 数据库将哈希登录与 db 进行比较

php - 为什么我会收到 undefined index 错误?

mysql - 如何返回仅包含不超过四个字符的数据的表中的所有列?

MySql "Many to One"表设计

java - hsql CLOB 列是否有大小限制以及如何配置它

php - 没有管理员权限的XAMPP服务