cod*_*bly 0 mysql sql position rank
我有一个分页的文章列表需要按排名排序,但当文章的位置<> 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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
要正常工作,第二个查询的限制必须等于第一个查询返回的行数.此外,任何时候一个具有非常高的排名,但也是非常高的位置的文章,它将在前面显示,因为在第二个查询中忽略了位置.
Sho*_*og9 11
你的第一个ORDER BY表达式并不是非常复杂.尝试:
ORDER BY ((position < (50 * (1 + (1-1 * (50 / 1))))
OR position = (50 + (50 - (50 * POW(50, 0)) * 1)))
AND (position > 50 * (1-1) / 1 * 50)) DESC
Run Code Online (Sandbox Code Playgroud)
或者,只需使用:
ORDER BY (position <= 50 AND position > 0) DESC
Run Code Online (Sandbox Code Playgroud)
我建议复杂化(或者,如果必须,简化)表达式的其余部分.我预测你要么找到你的问题,要么在另一个宇宙中打开一个洞,其中神奇的独角兽将解决你的问题.
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |