现在我想做一个简单的奴隶游戏买/卖功能。
现在我的数据库:T1, 我的数据是:
+----------+------------+------------+-----------+------------+----------+
| uid | exp | lvl | master | slaveby |bytime |
+----------+------------+------------+-----------+------------+----------+
| 1 | 123 | 1 | 10 | 20 |12345 |
| 20 | 456 | 1 | 1 | 0 |12345 |
| 10 | 111 | 2 | 0 | 1 |12222 |
+------------------------------------------------------------------------+
uid
是用户ID。 type int(11)
exp
是用户体验。 type int(11)
lvl
是用户级别。 type int(11)
master
表示用户现在是哪个uid的主人。 type int(11)
slaveby
表示用户现在是哪个uid的奴隶。 type int(11)
bytime
是用户slaveby
的时间。 type int(11)
在表数据中,我们可以知道第1行是用户1是用户10的主人,但也是用户20的奴隶。
现在我的编码就像这样。
if ($_GET['mod'] == 'hireSlave'){
mysql_query("UPDATE ".DB::table('game_goldwar_labour')." SET touid = '".$_GET['touid']."', bytime = '".$_GET[timestamp]."' WHERE uid = '".$_GET[uid]."'");
mysql_query("UPDATE ".DB::table('game_goldwar_labour')." SET byuid = '".$_GET[uid]."', bytime = '".$_GET[timestamp]."' WHERE uid = '".$_GET['touid']."'");
};
但是这个用户编码只能是1个用户的主人。
我想改变用户lvl
2,可以是2奴隶的主人,lvl
3,可以是3奴隶的主人,最大5奴隶,还有bytime
需要分离。因为我在bytime
达到最大时间时设置,所以从属用户将自动失控。如果此从属设备位于第二个插槽中,则将从属第二个插槽更新为0(通常是从属设备的用户ID,但因为已经失控,因此设置为0),之后,当主插槽可供使用时
根据级别提供的插槽,插槽为0.
而且当用户lvl
1时,无法获得2个奴隶。
如果我使用if / else语句,将是一个巨大的脚本。
那么如何改善呢?谢谢。
答案 0 :(得分:0)
你需要使用一个单独的表来存储奴隶,例如有列uid slave bytime
(你也不需要同时存储奴隶和主人,这就是' s多余的)。插入新记录时,请检查主记录级别以确保计数小于从站数量,否则不要插入新记录。如果一个从站一次只能有一个主站,我猜你在slave中需要一个UNIQUE约束。
获取主人的奴隶只需:
SELECT slave FROM slaves WHERE uid = {uid}
为了获取奴隶的主人,只需:
SELECT uid FROM slaves WHERE slave = {slaveid}
编辑:忘了提一件事,你真的应该做一些输入转义和验证,如果你还没有使用像PDO这样的数据库层来避免SQL注入。