当我知道数据在我的表中时,mysql为空结果集

时间:2016-05-17 20:36:02

标签: php mysql

我有5个表,我正在运行一个SELECT语句,当所有表中都有数据时它一切正常,但如果只有一个表中有数据,我得到零结果?当不是所有表都填充数据时,如何使查询工作。现在正好刮我的头,请帮忙!

SELECT admins.username, round1.player, round1.round1_score, 
     round2.player, round2.round2_score,
     round3.player, round3.round3_score, 
     round4.player, round4.round4_score, 
     round5.player, round5.round5_score 
FROM `admins`, `round1`, `round2`, `round3`, `round4`, `round5` 
WHERE admins.username <> 'admin' 
     AND admins.username = round1.player 
     AND admins.username = round2.player 
     AND admins.username = round3.player 
     AND admins.username = round4.player 
     AND admins.username = round5.player 
GROUP BY admins.username

4 个答案:

答案 0 :(得分:0)

我假设admins表是主表?您需要使用outer joins代替:

SELECT a.username, r1.player, r1.round1_score, 
       r2.player, r2.round2_score, r3.player, r3.round3_score, 
       r4.player, r4.round4_score, r5.player, r5.round5_score 
FROM `admins` a
    LEFT JOIN `round1` r1 ON a.username = r1.player
    LEFT JOIN `round2` r2 ON a.username = r2.player
    LEFT JOIN `round3` r3 ON a.username = r3.player
    LEFT JOIN `round4` r4 ON a.username = r4.player
    LEFT JOIN `round5` r5 ON a.username = r5.player,
WHERE a.username <> 'admin' 
GROUP BY a.username

我不确定你真的需要group by,一般情况下它用于聚合(有时用于获取distinct个记录)。

答案 1 :(得分:0)

The way your query is, is like using inner join so basically if one table has no data you get 0 results. You need to change your query using left join.

答案 2 :(得分:0)

尝试内连接或交叉连接表以获得答案我认为它会起作用 您可以阅读更多herehere

答案 3 :(得分:0)

您正在连接5个表

  

adminsround1round2round3round4round5

这是一个内部联接,你只有共同数据

如果您想要数据,即使您右侧的表格为空,也可以使用LEFT JOIN

 SELECT admins.username, round1.player, round1.round1_score, 
 round2.player, round2.round2_score,
 round3.player, round3.round3_score, 
 round4.player, round4.round4_score, 
 round5.player, round5.round5_scoreFROM (((((`admins` left join `round1` on admins.username = round1.player) 
    left join `round2` on admins.username = round2.player)
    left join `round3` on admins.username = round3.player)
    left join `round4` on admins.username = round4.player)
    left join `round5` on admins.username = round5.player)
    WHERE admins.username <> 'admin' 
    GROUP BY admins.username