需要高级SQL帮助

时间:2014-05-03 14:37:13

标签: mysql sql

我刚刚开始使用sql,我无法弄清楚如何在单个查询中获取所需的信息!

以下是SQLFiddle.com: http://sqlfiddle.com/#!2/585dc/1

下载数据库文件的链接: https://www.dropbox.com/s/16qvgj69ks385d8/sql.sql

我从查询中获得的信息是下载的COUNT,喜欢,来自各自表的视图以及从t_users中选择的有关用户的所有信息以及来自t_notes的注释信息,所有这些必须是仅从userID收集。基本上我想要关于单个用户上传的所有笔记的所有信息。

如果有人可以帮我解决这个问题,我真的很感激,因为我一直试图这么做几个小时!

这是我能得到的:

SELECT DISTINCT t_notes.*, t_users.*
FROM t_notes, t_users 
WHERE t_users.userID = :userID
AND t_users.userID = t_notes.userID
GROUP BY noteID
ORDER BY noteUploadDate DESC

但后来我不知道如何统计来自3个不同表格的所有下载,喜欢和分享数量。

1 个答案:

答案 0 :(得分:2)

这些查询中的任何一个都可以工作(尝试两者并查看哪一个运行得更快):

SELECT u.*,
       n.*,
       COUNT(DISTINCT d.downloadID) downloadCount,
       COUNT(DISTINCT l.likeID) likeCount
FROM t_users u
INNER JOIN t_notes n ON u.userID = n.userID
LEFT JOIN t_downloads d ON d.noteID = n.noteID
LEFT JOIN t_likes l ON l.noteID = n.noteID
WHERE u.userID = 1 -- write here the desired user id
GROUP BY n.noteID

SELECT u.*,
       n.*,
       (SELECT COUNT(*) 
          FROM t_downloads d 
          WHERE d.noteID = n.noteID) downloadCount,
       (SELECT COUNT(*) 
          FROM t_likes l
          WHERE l.noteID = n.noteID) likeCount
FROM t_users u
INNER JOIN t_notes n ON u.userID = n.userID
WHERE u.userID = 1 -- write here the desired user id
GROUP BY n.noteID;

请注意,您正在检索有关该用户的所有信息(表t_users),因为该用户的注释数量很多。另一方面,您不会为没有注释的用户检索任何记录。我不知道您的应用程序逻辑是什么,但在我看来,在一个查询中检索t_users中的信息以及有关备注(t_notes,下载计数的信息更有意义在另一个查询中,就像count)。