SQL - 如何从其他表中按计数排序

时间:2016-06-07 00:12:03

标签: sql

嘿stackoverflow社区,

我知道之前曾问过这个问题,但我不理解答案,所以我不能将它用于我自己的项目。如果有人能帮助我,那就太棒了。

我正在创建一个小的私人网址缩短器,我想通过视图计数来订购我的网址。我设置了像

这样的数据库
  • 表:网址: id,user_id,alias,url,title,created
  • 表:观点: id,user_id,alias,visitor_ip,created

如果有人点击了短链接,我会询问该网址的存储日期(user_id),并使用user_id和别名为视图添加一行,这样我就知道点击了哪个链接以及用户创建了这个网址。如何通过具有相同别名的视图中的行获取URL顺序?

这样的东西,但语法正确

SELECT * FROM urls WHERE user_id = {ANYUSER} ORDER BY COUNT(alias) FROM views

感谢阅读,希望有人能帮助我。 :)

编辑,因为评论中有一些问题。

对不起,我很抱歉。我有3个表用户,网址,视图。如果有人注册,他会获得一个自动递增的user_id。如果此用户创建了一个短网址,则会向网址添加一行(user_id,别名,标题)别名是一个随机生成的字符串示例:example.com/ dHeJk 现在如果somone访问该网址我首先要求对于属于该别名的user_id( dHeJk )并将其存储在变量中之后,我将数据添加到具有数据的视图(user_id,别名)user_id = {存储的用户}和alias =的 dHeJk 即可。现在我想列出最常查看的用户仪表板中的网址。 Mosted视图由表视图中的行数定义,其别名为 dHeJk

2 个答案:

答案 0 :(得分:1)

您可以针对视图表加入查询。

SELECT u.*, v.view_count
FROM urls u 
LEFT OUTTER JOIN  (SELECT user_id, count(*) view_count FROM views GROUP BY user_id) v on u.user_id = v.user_id
WHERE u.user_id = {ANYUSER} AND u.alias = {ANYALIAS}
ORDER BY v.view_count

我认为你的问题的一部分是你的表/关系设计。您的表通过别名(从原始查询派生)和user_id相关联。如果两个表中的alias和user_id相同,那么建立PK / FK关系会更有意义,如下所示,而urls主键是teh views表中的外键。 enter image description here

答案 1 :(得分:0)

如果这是MS SQL,你可以这样做吗?

SELECT a.user_id, a.col2, a.col3 
FROM (SELECT user_id, col2, col3, (SELECT COUNT(@ANYALIAS) FROM views) as aliasCount
     WHERE user_id = @ANYUSER ORDER BY aliasCount) a