之前提出的类似问题(即here),我得出结论:
遵循这个逻辑,我得到了varchar(24)"成就"列"用户"表。格式:
1,4,50,300,50
USER类知道1代表:"写了1个帖子" 4代表" 4个问题回答"等等。为了获得成就数据我使用:
SELECT column's respective row BY userID
+
explode (',', $array);
我在考虑varchar(24)是否是这个目的的最佳选择(比如说,总共有5个成就,每个最多4个数字+逗号后面,最大长度为varchar24)。
据我所知,即使我把varchar(200)放好 - 我的表与互联网巨头相比相对较小。
但追求完美的愿望不会让我成为人,我正在寻找你的建议和专业知识! =)
答案 0 :(得分:3)
我认为解决这个问题不是“最佳做法”。成就和用户与 n:m 关系相关联。 见:https://en.wikipedia.org/wiki/Third_normal_form
这需要您创建一个关系表,该关系表具有用户的外键和用于实现的外键。此表用于创建这些表之间的连接。 那将是最好的做法。
按照您的方式,您将始终受限于您拥有的列数。此外,在创建新列时,数据库将变慢以供实际使用。您可以尝试将其另存为CLOB(字符大对象),并记下成就的技术键列表,这些键由行分隔。但正如我提到的那样,复杂的实际任务。
MySQL的本机sql中的select语句可能如下所示:
SELECT USER.*, ACHIEVEMENT.* FROM USER_ACHIEVEMENT
INNER JOIN USER ON USER.ID = USER_ACHIEVEMENT.USER_ID
INNER JOIN ACHIEVEMENT ON ACHIEVEMENT.ID = USER_ACHIEVEMENT.ACHIEVEMENT_ID
USER_ACHIEVEMENT:是连接USER和ACHIEVEMENT的表。
注意:不建议在sql选择中使用*