...在确定分页块之前。
我知道你可以在多个陈述中做到这一点,但必须有更好的方法。
我的结果按日期排序,我想返回包含给定id的分页块。例如,我可以选择给定id的日期,然后选择一个结果块,其中date小于或大于日期。那会有用。但是有一些本地mysql方法在一个语句中做这种事情吗?如果结果按日期排序,我们可以要求X结果,其中存在给定的id,这似乎是合理的。
答案 0 :(得分:0)
我相信这个不能通过一个简单的声明来完成。但是有一个解决方案可以使用存储过程并定义由更多语句组成的自己的函数。
不幸的是,对于SELECT ... LIMIT x,你必须只使用整数,x和y不能是表达式,因此你不能通过分页标准来限制结果。
答案 1 :(得分:0)
SELECT *
FROM
(
SELECT @r := COUNT(*),
@up := @r,
@down := @r
FROM items
WHERE (timestamp, id) < (SELECT timestamp, id FROM items WHERE id = @id)
) i,
(
SELECT id, timestamp, st, c
FROM (
SELECT @down := CASE WHEN (@down % 50) <> 0 THEN @down := @down - 1 ELSE @down END AS c,
@stop := CASE WHEN (@down % 50) <> 0 THEN 0 ELSE 1 END AS st,
id, timestamp
FROM items
WHERE (timestamp, id) <= (SELECT timestamp, id FROM items WHERE id = @id)
ORDER BY
timestamp DESC, id DESC
LIMIT 50
) down
UNION ALL
SELECT id, timestamp, st, c
FROM (
SELECT @up := CASE WHEN (@up % 50) <> 0 THEN @up := @up + 1 ELSE @up END AS c,
@stop := CASE WHEN (@up % 50) <> 0 THEN 0 ELSE 1 END AS st,
id, timestamp
FROM items
WHERE (timestamp, id) > (SELECT timestamp, id FROM items WHERE id = @id)
ORDER BY
timestamp, id
LIMIT 50
) up
) r
WHERE NOT st
ORDER BY timestamp, id