繁体   English   中英

MySQL ORDER BY来自另一个表的“ count(*)和另外两个参数”

[英]MySQL ORDER BY “count(*) and 2 other parameters” from another table

我已经为这个问题苦苦挣扎了一个月左右。一直在搜索和阅读许多帖子,但仍然不知道如何使它工作。

基本上:我有2个数据库表fun_postsfun_post_upvotes而且我想

SELECT * 
FROM fun_posts 
ORDER BY (HOTTEST POSTS(MOST UPVOTED THIS WEEK))

这是我最新的代码,无法正常工作

SELECT * 
FROM fun_posts 
ORDER BY (SELECT count(*), image_id, date 
          FROM fun_post_upvotes 
          GROUP BY image_id 
          ORDER BY DATE(date) > (NOW() - INTERVAL 7 DAY) DESC, 
                   count(*) DESC, 
                   date DESC)

如果我将此行划分为2个不同的SELECT函数,它们将起作用。 我可以选择简单的帖子,也可以选择喜欢的订购数量。

但是,如果我像这样将它们分成一行,则会出现以下错误:

#1241-操作数应包含1列

编辑NR 1:

fun_posts 图片 fun_post_upvotes 图片

我检查的答案有问题:

在这里,查看我的select功能中帖子的排序方式。 (它像我想要的那样选择)10-> 134-> 132-> 2-> 13

图片

而这里有给定的代码(它选择图像,但不按此顺序)10-> 122-> 39-> 8-> 110

图片

您可以使用联接来执行此操作

SELECT fp.*, fpu.`cnt`
FROM fun_posts fp
LEFT JOIN ( SELECT image_id, COUNT(*) AS cnt
       FROM fun_post_upvotes
       WHERE `date` > (NOW() - INTERVAL 7 day)
       GROUP BY image_id
     ) fpu ON ( fpu.image_id = fp.id )
ORDER BY fpu.cnt DESC, fp.`date` DESC, fp.`id` DESC;

它从按fun_post_upvotes分组的fun_post_upvotes中选择一个列表,并计算行数。 该列表返回到主查询,并与fp.id匹配(LEFT JOIN)。 该查询将首先显示过去7天内投票最多的项目,而不是最少投票的项目。 如果未找到投票,结果仍将返回它们,但底部没有特定顺序。

您可以按以下顺序编辑订单,以获得所需顺序的商品。

这里是sqlfiddle.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM