2

有一组用户 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”很大(数万或数十万,索引等)

提前致谢。

4

1 回答 1

1

我认为这里没有问题,只要user_id被索引。

在一个类似的例子中,我曾经构建了一个临时 MEMORY 表来保存你的内容$str_ids,并与这个临时表进行了 JOIN。这个技巧的原因是:

  • (主要原因)列表相当大,我担心我可能会在查询长度中达到一些限制
  • (附带原因)我不得不在我的脚本过程中多次使用这个列表

构建(也许是索引)这样一个临时表的开销可能会或可能不会抵消使用它的可能好处。在我的情况下,它没有。

编辑:哦,如果您事先知道列表中元素的最大数量,那么这个线程提出了一个优雅的替代方案。

于 2012-06-10T09:22:59.390 回答