嘿stackoverflow社区,
我知道之前曾问过这个问题,但我不理解答案,所以我不能将它用于我自己的项目。如果有人能帮助我,那就太棒了。
我正在创建一个小的私人网址缩短器,我想通过视图计数来订购我的网址。我设置了像
这样的数据库如果有人点击了短链接,我会询问该网址的存储日期(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
答案 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表中的外键。
答案 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