mysql - выбрать блок разбиения на страницы, который включает данный идентификатор - PullRequest
0 голосов
/ 23 февраля 2009

... до того, как были определены куски пагинации.

Я знаю, что вы можете сделать это в нескольких утверждениях, но должен быть лучший способ.

мои результаты возвращаются упорядоченными по дате, и я хочу вернуть блок разбиения на страницы, который содержит данный идентификатор. Так что я мог бы, например, выбрать дату данного идентификатора, а затем выбрать фрагмент результатов, где дата меньше или больше, чем дата. Это будет работать. Но есть ли какой-нибудь родной метод mysql, чтобы делать подобные вещи в одном утверждении? Представляется разумным ожидать, что мы могли бы запросить результаты X, в которых существует определенный идентификатор, если результаты упорядочены по дате.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2009
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
0 голосов
/ 23 февраля 2009

Я считаю, что это не может быть выполнено одним простым утверждением. Но есть решение использовать хранимые процедуры и определить свою собственную функцию, состоящую из большего количества операторов.

К сожалению, для SELECT ... LIMIT x, y вы должны использовать только целые числа, x и y не могут быть выражениями, поэтому вы не можете ограничивать результаты с помощью критерия подкачки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...