桌子
选手们
id | name | rank id
1 | player1 | 3
2 | player2 | 0
3 | player3 | 0
4 | player4 | 1
5 | player5 | 0
6 | player6 | 0
公会
id | name
1 | test1
2 | test2
公会排名
id | guild_id
1 | 1 <- which is test
2 | 2 <- which is test2
询问
$player = query -> name
$player_id = $SQL->query('SELECT rank_id from players where name = "'.htmlspecialchars($player['name']).'"')->fetch();
$player_id = $player_id['rank_id'];
$has_guild = $SQL->query('SELECT guild_id from guild_ranks where id = '. $player_id .'')->fetch();
$has_guild = $has_guild['guild_id'];
if($has_guild == 0){
$guild_d_player = "No Guild";
}else{
$guild_do_player = $SQL->query('SELECT name from guilds where id = '.$has_guild.' > 0')->fetch();
$guild_do_player = $guild_do_player ['name'];
$guild_d_player = "";
}
这是发生这种情况:
这是关于公会的。
例子:
Name | Guild Name | This player truly is in a guild?
Player1 | Test | Yes
Player2 | TestNo Guild | <- Here is the problem, this player doesn't have guild but seems like if he was on one.
Player3 | TestNo Guild | No
Player4 | Test2 | Yes
Player5 | Test2No Guild | No
Player6 | Test2No Guild | No
Etc...
它重复行会名称,直到查询获得确实存在的新行会名称。
完整查询:http : //pastebin.com/03TYv9V9
SELECT g.name from players p
left join guild_ranks gr on p.rank_id=gr.id
left join guilds g on g.id=gr.guild_id
where name=...
如果返回的值为空(null),则玩家没有公会。
进一步说明:
您不应该按播放器查询此信息。您应该将此查询与您的主要查询结合在pastebin中代码的顶部。只需将此处使用的逗号语法更改为显式联接即可。
您提供的样本数据与预期结果不一致。Player1具有3作为rank_id,但是guild_rank表中没有id = 3的记录,但是根据预期结果,该玩家处于test1公会中。
我不了解guild_rank表的使用以及为什么将您的玩家链接到该表而不是将guild_id存储在玩家表中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句