mysql - 根据 id 的数组查询 id

标签 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。

帮助将不胜感激。

最佳答案

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

短期解决方案

使用MySQL's FIND_IN_SET function ,像这样:

SELECT * 
  FROM first_table 
 WHERE FIND_IN_SET(id, id_array)

长期解决方案

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

第一个表

  • first_table_id(主键)

FIRST_TABLE_TYPE_CODES

  • type_code_id(主键)

FIRST_TABLE_TYPE_MAP

  • first_table_id(主键)
  • type_code_id(主键)

关于mysql - 根据 id 的数组查询 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114618/

相关文章:

ruby-on-rails - Ruby on Rails Oracle 数据库连接

mysql - 使用 codeigniter 主动查询方法从数据库中选择并统计记录

php - 如何处理 PHP/SQL 支持的文件镜像上的多个文件版本?

java - 使用 JPA EclipseLink 进行无连接远程 MySQL 连接

sql - 如何只选择表中出现次数最少的记录?

mysql - SQL查询分组依据和全部

sql使用更新

asp.net - 使用 AddWithValue 插入 - 抛出错误?

mysql - Doctrine2 findOneBy 返回错误结果

php - Unix 时间戳不起作用