2

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

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

目前我正在使用“SELECT * FROM first_table WHERE id IN (id_array)”。

我曾经一个一个地查询,但我认为它要慢得多。

如果有人有更好的结构来为我提供数据库,那就太好了。这个结构是我想出的最好的,但我很确定它不是那么有效。我需要一种快速便捷的方法来从第一个表中找到属于 id 的所有 id。

帮助将不胜感激。

4

2 回答 2

2

逗号分隔值意味着数据是非规范化的——该IN子句对您不起作用,因为它适用于不同的值。

短期解决方案

使用MySQL 的 FIND_IN_SET 函数,如下所示:

SELECT * 
  FROM first_table 
 WHERE FIND_IN_SET(id, id_array)

长期解决方案

...不是以这种方式存储值,这意味着有一个表来存储不同的值,并且有一个表来将该不同值的表连接到原始表。IE:

FIRST_TABLE

  • first_table_id(主键)

FIRST_TABLE_TYPE_CODES

  • type_code_id(主键)

FIRST_TABLE_TYPE_MAP

  • first_table_id(主键)
  • type_code_id(主键)
于 2010-11-06T19:08:24.177 回答
0

您有一个字段包含与另一个表中的记录相关的 id?您可能希望创建一个将两个表链接在一起的查找表,以帮助您处理多对多关系。发布更多信息或您的数据库设置

于 2010-11-06T18:55:38.047 回答