只能
ORDER BY为
UNIOn‘d查询定义一个子句。使用
UNIOn或都没关系
UNIOnALL。MySQL确实支持’d查询的
LIMIT某些部分的子句
UNIOn,但是如果没有定义顺序的能力,它就相对没有用。
MySQL还缺少排名功能,您需要使用排名功能来处理数据中的空白(由于条目被删除而丢失)。唯一的选择是在SELECt语句中使用一个递增变量:
SELECT t.id, @rownum := @rownum+1 as rownum FROM MEDIA t, (SELECt @rownum := 0) r
现在我们可以获得行的连续编号列表,因此我们可以使用:
WHERe rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) +@upperlimit
将7用作@midpoint的值,则
@midpoint -ROUND(@midpoint/2)返回的值
4。要总共获得10行,请将@upperlimit值设置为10。这是完整的查询:
SELECT x.* FROM (SELECt t.id, @rownum := @rownum+1 as rownumFROM MEDIA t, (SELECt @rownum := 0) r) x WHERe x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit
但是,如果您仍然想使用
LIMIT,则可以使用:
SELECT x.* FROM (SELECt t.id, @rownum := @rownum+1 as rownum FROM MEDIA t, (SELECT @rownum := 0) r) x WHERe x.rownum >= @midpoint - ROUND(@midpoint/2)ORDER BY x.id ASC LIMIT 10



