根据id的数组查询id

时间:2010-11-06 18:52:27

标签: mysql sql database denormalized

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

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

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

我以前一个一个地查询,但我认为它慢得多。

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

帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

短期解决方案

使用MySQL's FIND_IN_SET function,如下所示:

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(主键)

答案 1 :(得分:0)

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