我刚刚为页面的基本轮廓编写了一些代码。它适用于我运行的游戏,但是查看代码我觉得我已经按错误的顺序编写了代码,而且我执行的查询次数超出了我的需要。
$query = mysql_query("SELECT * FROM bodyguards WHERE username='$u'"); if($bg = mysql_fetch_assoc($query)) { // if you have a bg if($bg[status] == "active") { echo "your bodyguard is $bg[bodyguard], kick him?"; } else { echo "invite a bg?"; } } else { $query = mysql_query("SELECT * FROM bodyguards WHERE bodyguard='$u' AND status='active'"); if($bg = mysql_fetch_assoc($query)) { // if you are a bg echo "you are the bodyguard of $bg[username]"; } else { //otherwise check if anyone has invited you $query = mysql_query("SELECT * FROM bodyguards WHERE bodyguard='$u' AND status='invited'"); while($temp = mysql_fetch_assoc($query)) { echo "$temp[username] has invited you to be their bodyguard, accept or decline?"; } } }
我只使用一个数据库表。如果一个玩家1有一个确认的保镖(玩家2),那么该行看起来像是:
username => PLAYER1, bodyguard => player2, status =>活性
这里的任何人都会以不同的方式编写代码吗?
答案 0 :(得分:3)
我会在一个查询中完成它:
$query = mysql_query("SELECT * FROM bodyguards WHERE username='$u' OR (bodyguard='$u' AND (status='active' OR status='invited')");
$bg = mysql_fetch_assoc($query);
if ($bg) { // check for empty result first, to prevent E_NOTICE
if ($bg['username'] == $u) {
if($bg['status'] == "active") {
echo "your bodyguard is {$bg['bodyguard']}, kick him?";
} else {
echo "invite a bg?";
}
} else if ($bg['bodyguard'] == $u) {
if ($bg['status'] == "active") {
echo "you are the bodyguard of {$bg['username']}";
} else if ($bg['status'] == "invited") {
echo "{$bg['username']} has invited you to be their bodyguard, accept or decline?";
}
}
}
注意:如果数据是由用户使用$u
提供的,请确保您转义mysql_real_escape_string
。另外,请确保引用数组索引以防止PHP通知(即:使用$bg['username']
而不是$bg[username]
)。
答案 1 :(得分:0)
每当我在一个表中的两个实体之间存在关联时,我通常会创建另一个表来保持这种关系。
我的 BodyGuardRelations 表可能看起来像
[id] [userId] [bodyGuardUserId] [status]
1 27 55 Active
2 43 89 Invited