Mysql 如何将3个查询组合在一个表中,并在每个表的一行中进行连接和计数?

Mysql 如何将3个查询组合在一个表中,并在每个表的一行中进行连接和计数?,mysql,join,Mysql,Join,我的桌子.. 我的疑问.. 1。用于用户名和类型 2。数一数“迈克”最喜欢的歌曲 3。数一数“Mike”的推荐歌曲 如何将这3个查询合并到一个查询中?有更好的方法编写它们吗?您可以对子查询使用联接 SELECT users.name, `genre`, t1.total_favorites, t2.total_suggestions FROM `users` INNER JOIN ( SELECT name, COUNT(`songs`) AS total_favorites

我的桌子..

我的疑问..

1。用于用户名和类型

2。数一数“迈克”最喜欢的歌曲

3。数一数“Mike”的推荐歌曲


如何将这3个查询合并到一个查询中?有更好的方法编写它们吗?

您可以对子查询使用联接

SELECT users.name, `genre`, t1.total_favorites, t2.total_suggestions
FROM `users` 
INNER JOIN  (
    SELECT name,  COUNT(`songs`) AS total_favorites 
    FROM `favorites` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
    
) t1 ON t1.name  = users.name
INNER JOIN  (
    SELECT name,  COUNT(`songs`) AS total_suggestions 
    FROM `suggestions` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
) t2 t2.name  = users.name
WHERE users.name = "Mike"
对于不匹配的值,可以尝试取消左连接和ifnull

SELECT users.name, `genre`, ifnull(t1.total_favorites,0) total_favorites, ifnull(t2.total_suggestions,0) total_suggestions
FROM `users` 
LEFT  JOIN  (
    SELECT name,  COUNT(`songs`) AS total_favorites 
    FROM `favorites` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
    
) t1 ON t1.name  = users.name
LEFT  JOIN  (
    SELECT name,  COUNT(`songs`) AS total_suggestions 
    FROM `suggestions` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
) t2 t2.name  = users.name
WHERE users.name = "Mike"

请在你的问题()中添加所需的结果。不确定,我的英语不是很好,我用谷歌翻译。对不起,如果我出错,“combine”并没有什么特别的意思。给出我们可以剪切、粘贴和运行的代码(包括初始化)。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。不工作,我也不知道为什么..错误:字段列表中的“名称”列不明确。。什么是t2,t1?以上t1 ist用户,t2收藏夹t3建议在您的代码nit?答案更新。全名为。。姓名谢谢friend@BeKu .. 如果我的答案是正确的,请(过去15分钟)将其标记为已接受…查看这里的操作,但我有一个问题,当一个表为空时,例如建议或收藏夹,请注意:尝试在中获取非对象的属性“名称”。。。注意:正在尝试获取。。。注意:正在尝试获取中非对象的属性“total_favorites”。。。如果表为空,则输出为0并显示0,这样会更好
SELECT COUNT(`songs`) AS "total_favorites" FROM `favorites` INNER JOIN `users` USING (pass) WHERE `name` = "Mike"
$fav_dat = mysqli_fetch_object($query);
$fav_dat->total_favorites;
SELECT COUNT(`songs`) AS "total_suggestions" FROM `suggestions` INNER JOIN `users` USING (pass) WHERE `name` = "Mike"
$sug_dat = mysqli_fetch_object($query);
$sug_dat->total_suggestions;
SELECT users.name, `genre`, t1.total_favorites, t2.total_suggestions
FROM `users` 
INNER JOIN  (
    SELECT name,  COUNT(`songs`) AS total_favorites 
    FROM `favorites` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
    
) t1 ON t1.name  = users.name
INNER JOIN  (
    SELECT name,  COUNT(`songs`) AS total_suggestions 
    FROM `suggestions` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
) t2 t2.name  = users.name
WHERE users.name = "Mike"
SELECT users.name, `genre`, ifnull(t1.total_favorites,0) total_favorites, ifnull(t2.total_suggestions,0) total_suggestions
FROM `users` 
LEFT  JOIN  (
    SELECT name,  COUNT(`songs`) AS total_favorites 
    FROM `favorites` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
    
) t1 ON t1.name  = users.name
LEFT  JOIN  (
    SELECT name,  COUNT(`songs`) AS total_suggestions 
    FROM `suggestions` 
    INNER JOIN `users` USING (pass) 
    GROUP BY name
) t2 t2.name  = users.name
WHERE users.name = "Mike"