只能为UNION’d查询定义一个ORDER BY子句.使用UNION或UNION ALL无关紧要. MySQL确实支持UNION’d查询部分的LIMIT子句,但如果没有定义顺序的能力,它就相对无用.
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 rownum
FROM 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