我正在尝试在这里找到更好的算法。在我的问题中,一个用户的列表中有 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/