gpt4 book ai didi

php - 存储用户 ID 列表的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 07:10:14 25 4
gpt4 key购买 nike

我现在正在开发 PHP/MySQL 评级系统。为了让用户能够评分,用户必须登录。每个用户都有一个唯一的“UID”。网站上将有多个评级实例(在我的例子中,每个游戏都有一个),我需要一种有效的方法在 MySQL 行中存储 UID 列表(评级系统的每个实例在评级表中有一个 MySQL 行) ) 来记录谁投票了。

我在其他系统中看到列表存储在序列化的 PHP 数组中。每次用户投票时,序列化的数组都必须提取、反序列化、插入新的 UID、重新序列化数组,并更新 MySQL 行。每次加载页面时,该列表都必须再次反序列化并检查查看该页面的用户是否已投票,以确保用户不会投票两次。

这似乎有点低效和麻烦。 MySQL 是否有一个内置的列表函数来帮助这个过程更有效率?有没有更聪明的方法可以解决这个问题?

我考虑过一种可能的替代方案,即忘记序列化并将 UID 存储在 MySQL 数据库的 TEXT 类型字段中。我会在每个 UID 后附加一些非数字字符(比如一个句点 [.])。要添加用户条目,我只需将 UID 连接到 TEXT 字段的末尾,然后连接一个句点。当检查用户是否已经投票时,我可以只“SELECT * FROM table WHERE votes = '%$UID.%';”。这会更有效地工作还是有更优雅的方式来完成工作?

关于表结构的后续帖子... Efficient MySQL table structure for rating system

最佳答案

效率低下。这里的关系术语是用户和游戏之间的多对多关系。用户可以对许多游戏进行投票。一个游戏可以由许多用户投票。解决方案是有一个连接表:

USERS (uid, name, ...)
GAMES (gid, name, ...)
VOTES (id, uid, gid, ...)

其中 uid 和 gid 是返回各自表的外键。

如果有人投票,则在 VOTES 中插入一条记录。

获取游戏的投票列表:

$get = mysql_query("SELECT * FROM votes WHERE gid = $game_id");
...

获取用户的投票列表:

$get = mysql_query("SELECT * FROM votes WHERE uid = $user_id");
...

等等。

不要连接数组并将其存储在单个列中。避免这种情况是正确的。

关于php - 存储用户 ID 列表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com