如何在 MySQL 列数组中查找 id

Posted

技术标签:

【中文标题】如何在 MySQL 列数组中查找 id【英文标题】:How to find id in MySQL column array 【发布时间】:2016-03-25 00:48:41 【问题描述】:

公司表结构:

(`id`=`1`, `name`=`CompanyName`, `members`=`3,52,134,21`)

members 列中的数字是添加到该公司的用户 ID。

当用户登录id = 3 OR 52 OR 134 OR 21 时,上面的行应该返回一个 mysql 查询。

这可以通过查询实现还是我必须编辑我的表结构?

【问题讨论】:

将 id 存储为 csv 是非常糟糕的数据库设计。您应该考虑标准化。 【参考方案1】:

试试:

SELECT * FROM tbl_name WHERE FIND_IN_SET('3',members);

注意:切勿以逗号分隔格式存储数据。如果还不晚,那就多做一张表,规范一下结构。通过对结构进行规范化,通过为列提供索引,可以轻松快速地进行搜索。

表名:company_users

pk_id    member_id   company_id(foriegn_key of company_table)
1          3           1
2          52          1
3          21          1

【讨论】:

谢谢,你能举个例子吗? @Koen 的例子是什么? "如果还不晚,那就多做一张表,规范化结构。通过规范化结构",你的意思是我必须多做一个名为“company_users”的表,并将其与公司表? @Koen 是的,创建一个包含多个逗号分隔 ID 条目的表。【参考方案2】:

使用FIND_IN_SET()函数:

试试这个:

SELECT u.*
FROM Company c
INNER JOIN company_users u ON FIND_IN_SET(u.id, c.members)
WHERE c.id = 1;

【讨论】:

【参考方案3】:

像这样使用 FIND_IN_SET() 方法..

SELECT * FROM table_name WHERE  FIND_IN_SET('your_search','table_column_name');

例如:

SELECT * FROM table_name WHERE FIND_IN_SET('52',members);

【讨论】:

以上是关于如何在 MySQL 列数组中查找 id的主要内容,如果未能解决你的问题,请参考以下文章

如何查找不在此数组中的所有记录? (MySql)

MySQL - 如何选择值在数组中的行?

在 MySQL 中的表的多个列中查找连接的字符串

jQuery - 数据表,如何获取列 ID

如何在 Apache Pig 中查找包含大量单词的列是不是具有真实的电子邮件 ID?

如何在数组中查找第一个零列(或最后一个非零列),大于某个列值