php - 使用 PHP 和 MySQL 获取信息的最佳算法是什么

标签 php mysql

我正在尝试在这里找到更好的算法。在我的问题中,一个用户的列表中有 200 个 friend 。我的数据库如下所示:

    username          friends
     someid           2,3,4,6,7

我所做的是在添加新 friend 时。人的唯一 ID 被添加到他的列表中,所以这里 2,3,4,6,7 是用户 friend 的 ID。

普通的用户信息数据库是这样的

   friends info 
    id     profile image    name               info
    2         his image    his name       presently

我的算法是获取 id 2 并从表中获取所有数据,将 id = 2 然后类似地 3、4、6 等等,但是如果用户有 200 个 friend ,我认为这可能会导致服务器出现严重问题保持服务器忙碌,因为它应该为 2 和 3 再次获取数据。

所以我在考虑更好的算法,因为如果用户有更多 friend ,服务器必须执行 MySQL (select *) 语句 200 次,如果他们有 200 个 friend ,这可能会导致严重的服务器问题。

我想知道是否有一个简单的算法可以做,或者我是否应该改变数据在数据库中的保存方式?

有时我想获取所有数据并将其存储在一个 php 变量中,然后将其保存到 JavaScript 变量中,然后使用 JavaScript 执行操作,因为 JavaScript 是客户端并消除了服务器问题。

更新

table 的大小有限制吗?我的意思是表格可以包含无限行吗?

friends_table
  user id       friend id
    2                3
    2                4
users_info table
  user id           image           small info
     3            some image             // 
     4              //                   //
     2                 //                //

正如人们建议的那样,我会更改结构,但如何将 friends_tabe 链接到用户信息表?

   $result = mysql(select * from friends_table where id = userdid);
   $row = mysql_fetch_array($result);

上面的查询获取了所有好友的id

现在我必须使用他们的 id 获取 friend 信息,所以我必须执行这个语句

   for($i=0 ;$i<count($row);$i++)
   mysql(select * from users_info where id=$row[$i])

我想我应该多次执行这个语句。换句话说,我必须循环这条语句吗?

最佳答案

创建一个 many-to-many 而不是在一列中存储所有 friend 的 ID与将用户映射到他们的 friend 的表的关系。

user_friends table:

| user_id  | friend_id |
|==========|===========|
|  someid  |     2     |
|  someid  |     3     |
|  someid  |     4     |
|  someid  |     6     |
|  someid  |     7     |

然后你可以在一个查询中选择所有的 friend 信息

SELECT `friends_info` * from `friends_info` 
LEFT JOIN user_friends ON user_friends.friend_id = friends_info.id
WHERE user_friends.user_id = someid

您可以像这样使用查询:

$result = mysql_query("<the query goes here>"); // Execute the query

while ($row = mysql_fetch_array($result, MYSQL_NUM)) { // For each row..
   (...)    // ...do sth with the data
}

mysql_free_result($result);

关于php - 使用 PHP 和 MySQL 获取信息的最佳算法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111255/

相关文章:

MySQL SELECT 运行多次

php - 分层选择人口 jQuery/PHP

javascript - 由于双击文本链接而导致重复的数据库条目

php - 获取调用函数参数

php - 链式选择框 - 基本

c# - ASP.Net可以连接到MySQL服务器,但我无法拉回数据?

mysql - 为什么聚合函数至少返回 1 行

php - 如何在 PHP 中清理/验证 XML 文件? PC数据错误

php - 浏览器同步 - PHP 和 htaccess?

mysql - mysql导入大于200MB的数据(.sql文件)的方法