查询SQL限额
Query SQL Limit
表格
球员
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...
重复公会名,直到查询得到一个真实存在的新公会名。
您应该使用单个查询 left joins 加入 3 tables:
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_ranktable中没有id=3的记录,但是根据生态结果,玩家在test1公会
我不明白 guild_rank table 的用途以及为什么你 link 你的玩家到那个 table 而不是存储 guild_id 在玩家中 table.
表格
球员
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...
重复公会名,直到查询得到一个真实存在的新公会名。
您应该使用单个查询 left joins 加入 3 tables:
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_ranktable中没有id=3的记录,但是根据生态结果,玩家在test1公会
我不明白 guild_rank table 的用途以及为什么你 link 你的玩家到那个 table 而不是存储 guild_id 在玩家中 table.