【发布时间】:2013-03-30 21:11:46
【问题描述】:
我有一个图片表,其中存储了图片 ID、标题、上传图片的用户、时间戳和文件扩展名。
我还有一个视图表,用于记录查看图像的时间。列是 id、图像 id、时间戳和查看图像的用户。
我需要但不知道该怎么做是运行一个 SQL 查询,它将按观看次数最多的顺序返回一组图像。
我一直在这里和 Google 上四处寻找,但不知道实际搜索什么。
【问题讨论】:
我有一个图片表,其中存储了图片 ID、标题、上传图片的用户、时间戳和文件扩展名。
我还有一个视图表,用于记录查看图像的时间。列是 id、图像 id、时间戳和查看图像的用户。
我需要但不知道该怎么做是运行一个 SQL 查询,它将按观看次数最多的顺序返回一组图像。
我一直在这里和 Google 上四处寻找,但不知道实际搜索什么。
【问题讨论】:
SELECT images.*, count(views.view_id) view_count
FROM images
LEFT JOIN views on views.image_id = images.image_id
GROUP BY images.image_id
ORDER BY view_count DESC
http://sqlfiddle.com/#!2/a669b/5
GROUP BY 子句告诉“聚合函数”(count、sum、min、max 等)如何表现。在这种情况下,我们按图像分组并获取每张图像的观看次数。 COUNT 只计算非空值,我们不想计算不存在的视图,所以我们要关闭 views.view_id。
如果您执行 INNER JOIN 而不是 LEFT JOIN,它只会返回有视图的图像。 LEFT JOIN 允许我们得到零计数。
【讨论】:
view_count 是我们为count(*) 的结果赋予的名称。
count(views.view_id) 是正确的,而不是 count(*)
您需要查看连接,将图像表连接到图像查看表,然后您可以跨两个表运行一个查询。
【讨论】: