我有一个图像表,用于存储图像ID,标题,上传它的用户,时间戳和文件扩展名。
我还有一个视图表,用于记录查看图像的时间。列是id,图像ID,时间戳和查看图像的用户。
我需要并且不知道该怎么做才能运行SQL查询,该查询将按照查看次数最多的顺序返回一组图像。
我一直在这里和谷歌一起看,但只是不知道实际搜索的内容。
答案 0 :(得分:3)
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允许我们计数为零。
答案 1 :(得分:0)
您需要查看联接,将图像表连接到图像查看表,然后您可以跨两个表运行一个查询。