【问题标题】:How to most efficiently select a row/record matching user ID for many user IDs?如何为许多用户 ID 最有效地选择与用户 ID 匹配的行/记录?
【发布时间】:2013-06-25 19:23:29
【问题描述】:

在我的数据库中,我有一个表,其中包含具有自己的主 ID 键和用户 ID 键的记录。客户端,在我的 javascript 中,我有一个包含许多用户 ID 的数组。对于这个数组中的每个 id,我希望在表中搜索并选择与匹配的用户 id 相关联的记录。我不确定我是否有最好、最有效的方法。

现在,这就是我的想法:

半伪代码:

Javascript

for each element (user id) in array: 
     .get( 'script.php', userid_data, function(response){
             // ..do something with the row/record data of that specific user...
           }

因此,对于该数组中的每个用户 ID,我执行 AJAX get() 请求,将该特定用户 ID 发送到 php 脚本,该脚本在整个表中搜索与用户 ID 匹配的记录/行。

PHP/MySQL (script.php)

/*..some connection code..*/
/*.. some receive code..*/
/* query code: */

 "SELECT * FROM `recordTable` WHERE `userid` =" .var_containing_userid.";"

/*...some array to json encoding..*/
/* return attribute data */         

然而,虽然这是我能想到的唯一方法,但这对我来说似乎并不是最有效的方法。

这是因为,理论上,用户 id 的数组和记录的数量在未来都可能无限多(或只是很多)。如果此表中有数百个 ID 和不断增长的记录,我不确定这会运行多快。

有没有更好/更快的方法?在这种方法的执行变得非常缓慢之前,记录表可以增长到多大?我正在使用 PhpMyAdmin。

【问题讨论】:

  • 你能得到一堆用户吗?从 1 到 1000 到一个 javascript 数组中,并在客户端从那里执行搜索。如果没有找到,那么执行数据库搜索?
  • 您是否可以将用户 ID/用户存储在数据库的另一个表中?因为那样你就可以使用 join,这肯定更快。
  • @iiro 不,恐怕不会...@petajamaja 嗯...在这种情况下如何加入帮助?所以我想我应该添加一个注释:我有一组 ID 客户端,因为我从 API (Facebook) 中提取这些用户 ID。它们是当前用户好友的用户 ID。我想如果他们已经很好地托管在我可以从中执行拉取请求的服务器上,为什么还要为他们准备另一个表。

标签: php sql ajax database web-applications


【解决方案1】:

试试这个查询:

   SELECT * FROM recordTable WHERE userid IN $user_id_array

$user_id_array 是包含 user_ids 的数组。

【讨论】:

  • 你觉得它更快吗?它在代码中看起来确实更好。我不知道/想到查询数组,这很整洁。我猜也可以使用 AJAX 发送数组?我去查一下。
  • 是的,这要快得多,而且可以使用 Ajax 发送数组。
  • 嗯,所以 $user_id_array 应该仍然是一个数组,而不是一个对象?
  • 好的,我会进一步研究并接受它是否有效。谢谢!
  • 嗯。由于 SQL 查询应该包含在引号中,变量 $user_id_array 是否应该像这样连接:"SELECT * FROM recordTable WHERE userid IN ".user_id_array.";" ?我收到警告/警告:mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in
【解决方案2】:

你可以试试这个

SELECT * FROM `users` WHERE userid IN ($ids)

$ids 是一个逗号分隔的 ID 字符串。

【讨论】:

  • 啊,跟下面kushal的方法这么相似?我会试试的。现在我无法弄清楚如何通过 AJAX .get() 将数组传递给脚本,并让脚本接收它。以前我一直在使用 JSON 文字传递数据。
  • 好的。感谢您的参考!我会调查的。赞成帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多