繁体   English   中英

如何合并2个SQL表

[英]how to combine 2 SQL tables

我迷失于INNERCROSS加入。

我有2个表,表Servers包含有关我的游戏服务器的所有信息,并且可以从中获取数据;

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玩家总数

我想要的不是在我的网站上显示一个表格,该表格从表格服务器获取服务器信息,并从表格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,我在SQL查询中添加了“ AS LiveStatCount”并使用了它。

试试这个,LEFT JOIN将为您提供带有或不带有统计信息的服务器:

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;
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

这听起来像是左(或右)外部联接 ,而不是内部或交叉联接。

内部联接将仅返回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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM