开发者

Incredibly hard join (for me)

I'm trying to make a web interface for a c++ game a friend have done. Unfortuantly Im not a php/sql guru.

Its especially hard when I need to join tables. Im not good with those.

To show you what im looking for: (i want to get all the members of a guild)

Guilds > The Badasses
-------------------------------
Rank      Player name
-------------------------------
Big Boss | Midvalley the Hornfreak

Loser    | Kraven the Hunter
           Saint Sinner
           Kull the Conqueror
           Zazi The Beast

Novice   | Igos du Ikana
--------------------------------

The tables look like this:

CREATE TABLE `guilds` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`founder` int(11) NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE `guild_ranks` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`guild_id` int(10) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`access` int(11) N开发者_如何学COT NULL
)

CREATE TABLE IF NOT EXISTS `players` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`account_id` int(10) unsigned NOT NULL,
`rank_id` int(10) unsigned NOT NULL
)

So lets say YOU wanted to get all guild members of guild ID 114, how would you do it?

Thanks alot!


SELECT guild_ranks.name, players.name
FROM guild_ranks 
JOIN players
ON guild_ranks.id = players.rank_id -- at least that's how I assume they're joined...
WHERE guild_ranks.guild_id = 114
ORDER BY guild_ranks.name;


The complete join:

select `p`.* from `players` `p`
              LEFT JOIN `guild_ranks` `r` ON (`p`.`rank_id`=`r`.`id`)
              LEFT JOIN `guilds` `g` ON (`r`.`guild_id`=`g`.`id`)
              WHERE `guild_id`=114

life would be easier if you named id in the guild table guild_id, etc, so it would look like

select `players`.* from `players`
              LEFT JOIN `guild_ranks` USING (`rank_id`)
              LEFT JOIN `guilds` USING (`guild_id`)
              WHERE `guilds`.`guild_id`=114


This ought to do it.

   SELECT p.* 
    FROM players p 
      JOIN guild_ranks gr ON (p.rank_id=gr.id)
      JOIN guilds g ON (gr.guid_id=g.id)
    WHERE g.id=114;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜