我有一个需要按排名排序的文章的分页列表,但是当文章的位置 <> 0 时,它必须插入到该特定位置。我认为我至少可以为当前页面提取具有正确位置的文章,然后在 PHP 中对它们进行排序以显示在正确的位置。我想在 MySQL 中只用一个查询来做到这一点
我的一些尝试是:
此查询首先尝试选择当前页面位置正确的文章,然后选择排名最高的文章
SELECT id, rank_score, position
FROM Articles
ORDER BY ((position <= (50 * 1)) AND (position > 50 * (1-1))) DESC, rank_score DESC
LIMIT 0, 50
50 是页面上显示的文章数,1 是当前页码,它们是在查询生成时添加的。
这个查询的问题是在第 2 页上的结果是错误的,因为通过添加 LIMIT 50,50 您可以超越在该页面上具有位置的文章。
另一种尝试:
SELECT (
SELECT id, rank_score, position
FROM Articles
ORDER BY ((position <= (50 * 1)) AND (position > 50 * (1-1))) DESC, rank_score DESC
LIMIT 50)
UNION (
SELECT id, rank_score, position
FROM Articles
ORDER BY rank_score DESC LIMIT x)
要正常工作,第二个查询的限制必须等于从第一个查询返回的行数。另外,任何时候一篇文章的排名很高,但位置也很高,因为在第二个查询中忽略了位置,所以它会更早地显示。