我无法理解如何进行查询以显示“观点上最受欢迎的三篇文章”(“状态:200 OK”)。
我目前正在处理2张桌子。
这些表中的列: 表“ public.log”
Column | Type | Modifiers
--------+--------------------------+--------------------------------------------------
path | text |
ip | inet |
method | text |
status | text |
time | timestamp with time zone | default now()
id | integer | not null default nextval('log_id_seq'::regclass)
索引:
和
Table "public.articles"
Column | Type | Modifiers
--------+--------------------------+-------------------------------------------------------
author | integer | not null
title | text | not null
slug | text | not null
lead | text |
body | text |
time | timestamp with time zone | default now()
id | integer | not null default nextval('articles_id_seq'::regclass)
索引:
。
到目前为止,我已经根据我的水平和对SQL的理解编写了此查询...
SELECT articles.title, log.status
FROM articles join log
WHERE articles.title = log.path
HAVING status = “200 OK”
GROUP BY title, status
显然,这是不正确的。我希望能够从数据库中提取三篇最受欢迎的文章,并且我知道将200 OK与“文章标题”进行“匹配”对我来说将显示或计数一次“观看”或点击。我的思考过程就像,我需要通过创建查询来确定article.title = log.path(1个唯一值)在日志数据库中显示的次数(状态为200 OK)。我的任务实际上是编写一个程序,该程序将使用“ [我的代码获取]数据库”来打印结果,以通过使用连接,聚合和where子句来进行繁重的工作。.在Python代码中进行最少的“后处理”本身。”
所有StackOverflow的解释,想法和技巧都值得赞赏...
答案 0 :(得分:0)
以下可能是您要记住的:
SELECT
a.title,
COUNT(*) AS cnt
FROM articles a
INNER JOIN log l
ON a.title = l.path
WHERE
l.lstatus = '200 OK'
GROUP BY
a.title
ORDER BY
COUNT(*) DESC
LIMIT 3;
这将返回状态数200的最高状态的三个文章标题。该答案假设您正在使用MySQL。