Mysql 根据id的数组查询id

Mysql 根据id的数组查询id,mysql,sql,database,denormalized,Mysql,Sql,Database,Denormalized,我的网站包括一个mysql数据库和两个表。 一个表有一个名为“id_array”的字段,它包含一个如下所示的字符串: '1,3,7,78,89,102'. 它表示第二个表中的id数组 检索第二个表中的id的最佳策略是什么? 我想要最快的方式 目前我正在使用“从id数组中id所在的第一个表中选择*” 我过去常常一个接一个地查询,但我认为这要慢得多 如果有人能为db提供更好的结构,那就太好了。 这种结构是我想到的最好的,但我敢肯定它没有那么有效。 我需要一种快速方便的方法从第一个表中查找属于该id的

我的网站包括一个mysql数据库和两个表。 一个表有一个名为“id_array”的字段,它包含一个如下所示的字符串: '1,3,7,78,89,102'. 它表示第二个表中的id数组

检索第二个表中的id的最佳策略是什么? 我想要最快的方式

目前我正在使用“从id数组中id所在的第一个表中选择*”

我过去常常一个接一个地查询,但我认为这要慢得多

如果有人能为db提供更好的结构,那就太好了。 这种结构是我想到的最好的,但我敢肯定它没有那么有效。 我需要一种快速方便的方法从第一个表中查找属于该id的所有id


非常感谢您的帮助。

您在另一个表中有一个字段,用于保存与记录相关的ID吗?您可能希望创建一个将两个表链接在一起的查找表,以帮助您建立多对多关系。多发布一点,或者您的数据库设置

逗号分隔的值表示数据已非规范化-IN子句不适用于您,因为它适用于不同的值

短期解决方案 像这样使用:

SELECT * 
  FROM first_table 
 WHERE FIND_IN_SET(id, id_array)
长期解决方案 …不是以这种方式存储值,这意味着有一个表来存储不同的值,并有一个表将不同的值表连接到原始表。即:

第一张桌子 第一个\u表\u id主键 第一个表格类型代码 键入\u代码\u id主键 第一张表格类型地图 第一个\u表\u id主键 键入\u代码\u id主键
首先,可能是我没有正确解释自己,因为IN子句对我有效。数组中的id是第二个表的主键。你说的类型代码是什么意思?第二个表的id只是整数,它们是自动递增的。@Tal:我做了一些假设,因为没有太多事情要做&我不清楚。如果你不需要第二张表,那就太好了——对于多对多的关系,地图表是大多数人错过的。听到这个消息太好了。你是说我的解决方案足够了?这些查询不是太慢吗?@Tal:测试是唯一知道的方法,但是我不会存储逗号分隔的数据,除非我必须这样做。听起来不错。你能给我解释一下这个概念吗?设置就是您描述的方式,一个表包含另一个表中id为的字符串。如果我有一个包含人员列表的person表,并且我希望将他们与他们就读的大学关联,那么您将有3个表。我将有一个带有person\u id的person表和一个带有college\u id的college表来表示唯一的值,第三个表将有两列,一列是college\u id,另一列是person\u id查找表。这样一个人就可以上许多大学或学校。也许大学不是最好的例子,但希望你能理解。