我目前正在使用MySQL和MyISAM。
我的函数在我的应用程序中返回一般朋友或用户的用户ID数组,当显示它们时,foreach似乎最好。
现在我的问题是我只有ID,所以我需要嵌套数据库调用,以根据循环中的用户ID获取每个用户的其他信息(即名称,头像,其他字段)。
我不指望成千上万的用户(主要是为了爱好学习),虽然我该如何做到这一点,例如将代码放在foreach中进行显示的灵活性,但不依赖于ID数组,所以我出去了好运使用单个查询?
关于我可以适当显示列表的任何一般结构或提示?
我的查询量(列表中每个用户1:1)是否不合适? (虽然用户的页面0..n,一次10个让我觉得它没那么糟糕。)
答案 0 :(得分:4)
您可以使用IN()MySQL方法,即
SELECT username,email,etc FROM user_table WHERE userid IN (1,15,36,105)
这将返回userid与这些ID匹配的所有行。你添加的ID越多,效率越低,但你提到的10左右应该没问题。
答案 1 :(得分:1)
为什么你不能只使用左连接来获取1次拍摄的所有数据?听起来你得到一个列表,但是你只需要获得所有单个用户的信息。是吗?
记住数据库是关于结果SETS的,一般情况下,如果需要,你只能返回一行,你几乎不需要获得一行,然后返回获取更多信息。
例如,朋友列表可能会保存在用户条目的文本列中。
答案 2 :(得分:1)
无论您希望拥有小型数据库还是大型数据库,我都会考虑使用InnoDB引擎而不是MyISAM。它的处理开销比MyISAM高一些,但是你可以获得所有额外的好处(随着你的爱好增长),包括JOIN,这将允许你从多个表中提取特定数据:
SELECT u.`id`, p.`name`, p.`avatar`
FROM `Users` AS u
LEFT JOIN `Profiles` AS p USING `id`
将返回来自用户的ID以及来自个人资料的名称和头像(两个表的ID匹配)
网上有很多关于数据库规范化的资源,您可能会喜欢:http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/