2013-11-23 55 views
-2

这是为了查找玩家,现在如果他们不是公会会员将返回。因此,如果p.rank_id大于零,代替几个查询是否可以只加入ranksguilds只有某些领域高于0时才加入

如果这是可能的话,会很棒!

SELECT 
    p.id, 
    p.name, 
    p.sex, 
    p.level, 
    p.city, 
    p.last_login, 
    p.comment, 
    p.skill, 
    r.name AS rank, 
    g.name AS guild 
FROM 
    players p 
INNER JOIN 
    ranks r 
ON 
    r.id = p.rank_id 
INNER JOIN 
    guilds g 
ON 
    g.id = r.guild_id 
WHERE 
    p.name = :name 
+0

如果'排ID = 0'会发生什么?你会怎么做?我怀疑你可以在传递给sql之前在你选择的程序中进行测试。 – Edper

+0

如果等级为0,我想选择玩家表,但不是连接。 – Kaka

回答

0

尝试UNION ALL像:

SELECT p.id, p.name, p.sex, p.level, p.city, p.last_login, p.comment, p.skill, r.name AS rank, g.name AS guild 
FROM players p 
INNER JOIN ranks r 
ON r.id = p.rank_id 
INNER JOIN guilds g 
ON g.id = r.guild_id 
WHERE p.name = :name and p.rankid>0 
UNION ALL 
SELECT p.id, p.name, p.sex, p.level, p.city, p.last_login, p.comment, p.skill, '' AS rank, '' AS guild 
FROM players p 
WHERE p.name = :name and p.rankid=0 
+0

就像一个魅力!谢谢 – Kaka

+0

很高兴听到它的作品。快乐编码和上帝保佑。 – Edper

0

当然可以。添加

AND p.rankid > 0 

WHERE条款,如

WHERE 
    p.name = :name AND p.rankid > 0 
+0

但是我不能搜索没有排名的球员。你看? – Kaka