【问题标题】:MySQL sort images by most viewedMySQL 按浏览次数排序图像
【发布时间】:2013-03-30 21:11:46
【问题描述】:

我有一个图片表,其中存储了图片 ID、标题、上传图片的用户、时间戳和文件扩展名。

我还有一个视图表,用于记录查看图像的时间。列是 id、图像 id、时间戳和查看图像的用户。

我需要但不知道该怎么做是运行一个 SQL 查询,它将按观看次数最多的顺序返回一组图像。

我一直在这里和 Google 上四处寻找,但不知道实际搜索什么。

【问题讨论】:

    标签: php mysql sorting


    【解决方案1】:
    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 允许我们得到零计数。

    【讨论】:

    • 这没有得出任何结果:/ 我觉得我应该解释一下,views 表中的每一行都计入一个图像视图
    • 这应该正是这样做的。表名和列名对吗?我只是对实际名称进行了疯狂的猜测。
    • 是的,据我所知,一切都正确命名。虽然 view_count 不是我数据库中的名称,但这有关系吗?
    • view_count 是我们为count(*) 的结果赋予的名称。
    • 我已经编辑以反映 count(views.view_id) 是正确的,而不是 count(*)
    【解决方案2】:

    您需要查看连接,将图像表连接到图像查看表,然后您可以跨两个表运行一个查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      相关资源
      最近更新 更多