MySQL - 有效地交叉引用ID数组

时间:2012-06-10 08:52:26

标签: php mysql sql

有一个用户ID集合的POST请求被传递到PHP脚本中。该集合将与' user_table'中的现有ID进行比较。

这是通过将一个id数组连接成一个字符串来实现的,并且在查询中直接使用得到的逗号分隔id字符串。

我担心这不会很好地扩展,并且可能是一场灾难!任何人都可以分享一些关于这种问题的传统方法的智慧吗?

$id_json_array = postVar('u');
$user_ids = json_decode($id_json_array);
$str_ids = join(',', $user_ids);

$result = mysql_query(
   "SELECT  u.user_id AS i
          , u.user_name AS u
    FROM    user_table u
    WHERE   u.user_id IN ($str_ids)"
) or die (mysql_error ());

ids数组可能是几千个,而且' user_table'很大(数十或数十万,索引等)

提前致谢。

1 个答案:

答案 0 :(得分:1)

只要user_id被编入索引,我就没有问题。

在一个类似的例子中,我曾经构建了一个临时MEMORY表,其中包含了$str_ids的内容,并使用此临时表进行了JOIN。这个伎俩的原因是:

  • (主要原因)列表相当大,我担心我可以在查询中获得一些限制
  • (副原因)我必须在我的剧本
  • 中多次使用此列表

构建(并且可能索引)这样的临时表的开销可能会或可能不会抵消使用它的可能好处。就我而言,它没有。

编辑:哦,this thread提出了一个优雅的选择,如果您事先知道列表中的最大元素数。