我一直在努力解决这个问题大约一个月。 一直在搜索和阅读很多帖子,但仍然无法弄清楚,如何使这项工作..
基本上:我有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
函数,它们就可以工作。我可以选择简单的帖子,我可以按照自己的意愿选择upvotes count。
但如果我把它们变成这样的一行,我会得到以下错误:
#1241 - 操作数应包含1列
编辑NR 1:
我检查的答案有问题:
在此处,查看我的select
功能中的帖子排序方式。 (它选择我想要的)10-> 134-> 132-> 2-> 13
这里有给定的代码(它选择图像,但不是按顺序)10-> 122-> 39-> 8-> 110
答案 0 :(得分:4)
您可以使用联接来执行此操作
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;
它从image_id分组的fun_post_upvotes
中选择一个列表并计算行数。该列表返回到主查询并匹配(LEFT JOIN)fp.id.查询将首先显示过去7天内最多投票的项目,而不是最少。如果没有找到upvotes,结果仍然会返回它们,但是在底部没有特定的顺序。
您可以按照编辑顺序,按照您喜欢的顺序获取项目。