用户表是必须的 userId userPassword userLevel(是否为会员之类的标记) user身份z号 userName userEmail 暂且这些
游戏人物需要一个表该表的有个uid字段与 用户表的userId关联 并形成一对多关系 一个userID对应 多个游戏人物
需要 游戏人物ID 人物级别 人物职业 人物性别 暂且这些
然后定义一个游戏人物详细的表
需要 一个外键 gameId 与 游戏人物那个表的 游戏人物ID关联
字段应该有 人物血 人物蓝 人物攻击 人物魔法 人物防御 人物移动速度
当然我给你的就是个简单的思路 如果你做 角色扮演类游戏 我想这些字段是必须的 具体要哪些字段 还要看你做什么游戏,没有必要过于拘泥,完全可以根据自己的游戏内容进行表的定义 但是记住尽量功能模块化 就是表中字段不易太多,一个表表示一小部分就可以 这样你维护方便 以后拓展也方便
SELECT * FROM ((SELECT * FROM user as is_m WHERE is_m.isMember = '1') UNION ALL (SELECT * FROM user as not_is WHERE not_is.isMember = '0' ORDER BY RAND() LIMIT 10 )) as t ORDER BY t.id DESC LIMIT 10, 20"这是雏形,你可以进行优化。
拆分详解:
(SELECT * FROM user as is_m WHERE is_m.isMember = '1') 这个括号中,是查询会员,这个不用多说,你应该明白,至于为什么要加别名,同表多次查询自然要加别名以区分;
(SELECT * FROM user as not_is WHERE not_is.isMember = '0' ORDER BY RAND() LIMIT 10 )这个括号中,是查询非会员,其中ORDER BY RAND() LIMIT 10是关键,它的意思就是从中随机取十个结果;
SELECT * FROM (会员 UNION ALL非会员) as t ORDER BY t.id DESC LIMIT 10,20。这里即用到了联合查询UNION ALL,也用到了子查询,把联合查询的结果作一个结果集,然后从中进行查询,查询这个结果集的时候,使用ORDER BY和LIMIT进行分页处理。
以上,就是该语句的详解了,当然,其中也需要你做一些处理。
比如要先进行判断会员数满没满三十个,满了则无需如此,直接使用会员,没满则计算出还差多少个,在查询非会员那里LIMIT 数字才好使用;
至于分页,这个又是另一个问题了,你应该知道怎么分页的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)