我迷失了INNER
或CROSS
加入。
我有2个表,表服务器保存有关我的游戏服务器的所有信息,我得到数据;
SELECT serverId, hlstats_Servers.name, address, port FROM hlstats_Servers
表名为Livestats,其中包含有关玩家以及他们正在播放的server_id的信息。在我使用的那张桌子上;
SELECT count(steam_id) FROM hlstats_Livestats WHERE steam_id!="bot" GROUP BY server_id
根据server_id
不,我想要的是在我的网站上显示一个表,该表从表Servers获取服务器信息,并从表Livestats中将总量玩家放在它前面。此外,如果服务器没有激活播放器,则应显示0
有人能指出我正确的方向如何实现这一点,经过4个小时的尝试,我迷失了。
好的都适用于mattgiltaji的解决方案(非常感谢) 错字是" ON s.serverId = l.serverId"必须是" ON s.serverId = l.server_id"但现在我遇到一个php问题,如何回显COUNT(l.steam_id)?
echo "<td>" . $row['steam_id'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['act_map'] . "</td>";
echo "<td>" . $row['address'] . ':' . $row['port'] . "</td>";
所有工作除了steam_id计数
感谢Riley,我添加了#34; AS LiveStatCount&#34;到我的SQL查询并使用它。
答案 0 :(得分:0)
试试这个,LEFT JOIN将为你提供服务器,无论是否有stat:
SELECT s.serverId,
s.name,
s.address,
s.port,
COUNT(l.steam_id)
FROM hlstats_Servers s
LEFT JOIN hlstats_Livestats l ON s.serverId = l.serverId
WHERE l.steam_id != "bot"
GROUP BY s.serverId,
s.name,
s.address,
s.port;
答案 1 :(得分:0)
SELECT serverId, hlstats_Servers.name, address, port, count(HL.steam_id)
FROM hlstats_Servers
LEFT JOIN hlstats_Livestats HL ON serverId = HL.server_id
WHERE HL.steam_id !="bot"
GROUP BY HL.server_id
答案 2 :(得分:0)
这听起来像是left (or right) outer join,而不是内部或交叉连接。
内部联接只返回hlstats_Servers和hlstats_Livestats中的记录,因此如果使用内部联接,任何具有0个玩家的服务器都不会显示在结果集中。
交叉连接将返回hlstats_Servers中每一行与hlstats_Livestats中每一行的组合,这比您需要的数据多得多。
左(或右)外连接将返回两个表中的所有记录以及第二个表中不存在的任何记录的NULL。
您的SQL可能如下所示:
SELECT s.serverId, s.name, s.address, s.port, COUNT(l.steam_id) FROM hlstats_Servers s
LEFT JOIN hlstats_Livestats l ON s.serverId = l.server_id AND l.steam_id != "bot"
GROUP BY s.serverId, s.name, s.address, s.port;