查询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...

重复公会名,直到查询得到一个真实存在的新公会名。

完整查询:http://pastebin.com/03TYv9V9

您应该使用单个查询 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),则表示玩家没有公会。

补充说明:

  1. 您不应该通过播放器查询此信息。您应该将此查询与您在 pastebin 中代码顶部的主要查询结合起来。只需将此处使用的逗号语法更改为显式连接即可。

  2. 您提供的示例数据与预期结果不符。 player1有3个rank_id,但是在guild_ranktable中没有id=3的记录,但是根据生态结果,玩家在test1公会

  3. 我不明白 guild_rank table 的用途以及为什么你 link 你的玩家到那个 table 而不是存储 guild_id 在玩家中 table.