Apenas um
ORDER BY cláusula pode ser definida para um UNION perguntaria. Não importa se você usa UNION ou UNION ALL . MySQL suporta o LIMIT cláusula em partes de um UNION 'd query, mas é relativamente inútil sem a capacidade de definir a ordem. O MySQL também não possui funções de classificação, que você precisa para lidar com lacunas nos dados (ausentes devido à exclusão de entradas). A única alternativa é usar uma variável de incremento na instrução SELECT:
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
Agora podemos obter uma lista numerada consecutivamente das linhas, para que possamos usar:
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) example@sqldat.com
Usando 7 como valor para @midpoint,
@midpoint - ROUND(@midpoint/2) retorna um valor de 4 . Para obter 10 linhas no total, defina o valor @upperlimit como 10. Aqui está a 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
Mas se você ainda quiser usar
LIMIT , você pode 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