Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询,使用单个查询从三个表中获取记录_Mysql - Fatal编程技术网

Mysql查询,使用单个查询从三个表中获取记录

Mysql查询,使用单个查询从三个表中获取记录,mysql,Mysql,我们有三张桌子 表1-应用程序(id、名称) 表2-appPlayer(id、名称) 表3-appPlayerSession(id、appId、appPlayerId、版本) 我当前的查询是: SELECT (select name from app k where k.id= aps.appId) AS appName,version,appId,count(version) FROM appPlayerSession aps GROUP BY appId,version,appName

我们有三张桌子
表1-应用程序(id、名称)
表2-appPlayer(id、名称)
表3-appPlayerSession(id、appId、appPlayerId、版本)

我当前的查询是:

SELECT  (select name from app k where k.id= aps.appId) AS appName,version,appId,count(version) FROM appPlayerSession aps GROUP BY appId,version,appName
我们需要统计同一版本的每个游戏的会话用户数,并且使用单个mysql查询所有用户数据的对象

当前结果使用我的查询,但我们还需要每个应用程序的玩家


由于您尚未给出预期结果,根据您的要求,您可以这样做。它可能会根据您的要求进行增强

SELECT  (select name from app k where k.id= aps.appId) AS appName,version,appId,(select P.name from appPlayer P where P.id=aps.appPlayerid) as appPlayerName, count(version) FROM appPlayerSession aps GROUP BY appId,version,appName,appPlayerName
另外,请根据您的要求检查小提琴,因为您没有提供任何数据集,并且是基于我的假设。

根据您新添加的要求创建新Sql-

select X.appname,X.version,X.appid,GROUP_CONCAT(distinct X.appPlayerName      order by X.appPlayerName) as Users ,
 sum(X.vercount) 
 from (SELECT  (select name from app k where k.id= aps.appId) 
 AS appName,version,appId,
 (select P.name from appPlayer P where P.id=aps.appPlayerid) 
 as appPlayerName, count(version)as vercount
 FROM appPlayerSession aps 
 GROUP BY appId,version,appName,appPlayerName) X
 group by X.appname,X.version,X.appid

新建fiddle-

您可以在sql中使用JOIN连接多个表并获取结果

格式如下:

SELECT t1.col, 
       t3.col 
FROM   table1 
       JOIN table2 
         ON table1.primarykey = table2.foreignkey 
       JOIN table3 
         ON table2.primarykey = table3.foreignkey 
就你而言:

SELECT app.col, 
       appPlayer.col,
     appPlayerSession.col 
FROM   app 
       JOIN appPlayer 
         ON app.id = appPlayer.appId
       JOIN appPlayerSession 
         ON appPlayer.id = appPlayerSession.appPlayerId
希望这是有帮助的


一个建议。对表名和列名使用camelCase不是标准。snake_案例广受欢迎。

看看与“连接”相关的mysql文档:你会找到答案,你应该使用连接。你是对的,尝试连接,但计数呢?我们需要使用单个mysql查询获取所有记录…您可以选择应用程序中的所有信息(id,名称)加入应用程序id上的应用程序播放器表(我希望与应用程序用户信息相关),获取他的姓名,然后您可以根据播放器id加入会话表。将这三个表连接在一起时,每个表将获得一个别名(很可能是单个字符,如appPlayer p),您可以在前面的select查询中引用该别名。在那里,您可以对加入的任何列使用计数功能(例如,选择…计数(s.appPlayerId)…)。在运行appid时再运行一条内部select语句,并将其添加到group by子句中。在编写查询时也要执行别名,因为这将减少读取时的开销quaey@Kandy请您写下查询:D?现在请检查您的答案链接,这里有两个appId 1的条目,同一版本有两个不同的用户。@MuhammadAwaisZulifqar您能根据您的要求在我的小提琴的第三个表格中添加数据集吗。已经添加,请检查@MuhammadAwaisZulifqar您是否可以为所描述的相同内容添加预期输出situation@MuhammadAwaisZulifqar请按照要求检查新sql,如果对您有帮助,也请提供答案。