有一个用户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'很大(数十或数十万,索引等)
提前致谢。
答案 0 :(得分:1)
只要user_id
被编入索引,我就没有问题。
在一个类似的例子中,我曾经构建了一个临时MEMORY表,其中包含了$str_ids
的内容,并使用此临时表进行了JOIN。这个伎俩的原因是:
构建(并且可能索引)这样的临时表的开销可能会或可能不会抵消使用它的可能好处。就我而言,它没有。
编辑:哦,this thread提出了一个优雅的选择,如果您事先知道列表中的最大元素数。