【问题标题】:ORDER query BY two variables : sum() and dateORDER 查询 BY 两个变量:sum() 和 date
【发布时间】:2017-10-03 13:50:34
【问题描述】:

我的网站显示了一个图像(媒体)列表,人们可以在其中对它们投赞成票和反对票。我希望能够按最近的投票最多的图像列出这些图像。

这是我的两张桌子:

媒体

+----+-------+-----------+---------------------+
| id | name  |    url    |        date         |
+----+-------+-----------+---------------------+
|  1 | koala | koala.jpg | 2017-10-03 09:27:19 |
|  2 | ...   | ...       | 2017-10-02 09:27:01 |
|  3 | ...   | ...       | 2017-10-01 09:25:23 |
+----+-------+-----------+---------------------+

投票

+----+----------+-------+---------------------+
| id | media_id | value |        date         |
+----+----------+-------+---------------------+
|  1 |        1 |     1 | 2017-10-03 09:27:19 |
|  2 |        1 |    -1 | 2017-10-03 03:27:19 |
|  3 |        2 |     1 | 2017-10-03 02:27:19 |
+----+----------+-------+---------------------+

到目前为止,我能够按最受好评的媒体列出媒体,但我找不到加入medias 表并使用medias.date 进行排序的方法。

$q = $db->query('SELECT media_id,SUM(value) AS trend FROM votes GROUP BY media_id ORDER BY trend DESC');

while($data = $q->fetch())
{
  echo $data['media_id'].'<br>';
}

有什么帮助吗?

编辑:除了第一个查询之外,我还想按 medias.date 订购我的媒体。

【问题讨论】:

  • 你试过加入表格吗?
  • 您要在哪个日期之前订购?您正在分组 .. 每个组有超过 1 个日期。
  • @sagi 从上下文中我假设这是媒体日期,否则无需加入。
  • 您正在查看votes 表。 media 表日期是 OP 可能想要的。我又不知道了。 OP 好像消失了。
  • 除了第一次查询外,我还想按 medias.date 订购我的媒体

标签: php mysql sql join


【解决方案1】:

您可以加入表格。使用查询:

SELECT m.id,SUM(v.value) AS trend 
FROM media m 
  JOIN votes v 
    ON m.id=v.media_id 
GROUP BY m.id 
ORDER BY trend DESC, m.date DESC

检查小提琴:http://sqlfiddle.com/#!9/da4455/1/0

【讨论】:

    【解决方案2】:

    只需JOIN 两个表。

    例子:

    SELECT rating.trend, medias.date, medias.id
    FROM (SELECT media_id, SUM(value) AS trend FROM votes GROUP BY media_id) AS rating
    INNER JOIN medias ON medias.id = rating.media_id
    ORDER BY rating.trend DESC, medias.date DESC
    

    您还可以从medias 表中添加nameurl 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多