ORDER 查询 BY 两个变量:sum() 和 date
Posted
技术标签:
【中文标题】ORDER 查询 BY 两个变量:sum() 和 date【英文标题】:ORDER query BY two variables : sum() and 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 订购我的媒体
【参考方案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
表中添加name
和url
列。
【讨论】:
以上是关于ORDER 查询 BY 两个变量:sum() 和 date的主要内容,如果未能解决你的问题,请参考以下文章
涉及的 SQL 查询问题(我猜是 SUM、Group By、Order by?也许是总数,甚至计数)
Oracle - SELECT DENSE_RANK OVER(ORDER BY、SUM、OVER 和 PARTITION BY)
RESET SUM(AMT_FIELD) OVER(PARTITION BY UNIQUE FIELD ORDER BY ROWNUM)