[英]MySQL ORDER BY “count(*) and 2 other parameters” from another table
我已经为这个问题苦苦挣扎了一个月左右。一直在搜索和阅读许多帖子,但仍然不知道如何使它工作。
基本上:我有2个数据库表fun_posts
和fun_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:
我检查的答案有问题:
在这里,查看我的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天内投票最多的项目,而不是最少投票的项目。 如果未找到投票,结果仍将返回它们,但底部没有特定顺序。
您可以按以下顺序编辑订单,以获得所需顺序的商品。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.