我目前正在尝试在数据库中找到3篇最受欢迎的文章。我想打印出每个的标题和观看量。我知道为了这样做,我必须将两个表(文章和日志)连接在一起。
文章表中有一列标题,另一列标题为slug。
日志表中有一列路径,格式为/ article /' slug'。
我如何加入这两个表,过滤掉与articles表的slug列比较的路径,并使用count来显示它被查看的次数?
使用的正确查询是:
SELECT title, count(*) as views
FROM articles a, log l
WHERE a.slug=substring(l.path, 10)
GROUP BY title
ORDER BY views DESC
LIMIT 3;
答案 0 :(得分:0)
如果我理解正确,您只需要使用聚合基于一列连接两个表。问题是您无法直接比较它们,但之前必须使用一些string functions。
假设这样的架构:
article
| title | slug |
-------------------
| title1 | myslug |
| title2 | myslug |
log
| path |
--------------------------
| /article/'myslug' |
| /article/'unmentioned' |
尝试以下内容:
select title, count(*) from article a join log l where concat('''', a.slug, '''') = substring(l.path, 10) group by title;
对于更复杂的查询,首先编写较小的查询可以帮助您稍后找出整个查询。例如,只检查字符串函数是否返回您期望的内容:
select substring(l.path, 10) from log l;
select concat('''', a.slug, '''') from article a;