Solo un ORDER BY
la cláusula se puede definir para un UNION
preguntaría. No importa si usas UNION
o UNION ALL
. MySQL admite el LIMIT
cláusula sobre partes de un UNION
consultaría, pero es relativamente inútil sin la capacidad de definir el orden.
MySQL también carece de funciones de clasificación, que necesita para lidiar con las lagunas en los datos (que faltan debido a la eliminación de entradas). La única alternativa es usar una variable incremental en la sentencia SELECT:
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
Ahora podemos obtener una lista numerada consecutivamente de las filas, por lo que podemos usar:
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) [email protected]
Usando 7 como valor para @midpoint, @midpoint - ROUND(@midpoint/2)
devuelve un valor de 4
. Para obtener 10 filas en total, establezca el valor @upperlimit en 10. Esta es la consulta completa:
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
Pero si todavía quieres usar LIMIT
, puedes usar:
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