Найти «следующий» самый высокий идентификатор в MySQL - PullRequest
5 голосов
/ 04 сентября 2011

Я занимаюсь разработкой веб-приложения, в котором есть несколько очень похожих страниц, которые пользователи хотели бы просматривать. Данные для этих «страниц» хранятся в базе данных с уникальным идентификатором в качестве первичного ключа.

Я бы хотел, чтобы на каждой странице была кнопка «СЛЕДУЮЩАЯ», которая запрашивает базу данных и выясняет, какой следующий наибольший идентификатор, и отображает данные этого идентификатора. Моя проблема в том, что есть пара условий:

  • Иногда страницы могут быть удалены или удалены, это означает, что в идентификаторах есть пробелы, поэтому я не могу просто сделать -1.
  • Мне нужно только возвращать страницы, где столбец «активный» == 1

У кого-нибудь есть какие-либо советы или предложения? Спасибо!

Ответы [ 6 ]

9 голосов
/ 04 сентября 2011

как-то так?

SELECT id FROM table WHERE id > '$id' AND active = '1' ORDER BY id ASC LIMIT 1

тогда для кнопки PREV понадобится что-то вроде этого:

SELECT id FROM table WHERE id < '$id' AND active = '1' ORDER BY id DESC LIMIT 1
3 голосов
/ 04 сентября 2011
  select t.* 
    from table t
   where t.id = 
         (select min(s.id)
            from table s
           where s.active = 1
             and s.id > target);
2 голосов
/ 04 сентября 2011

Я не совсем понимаю ваш сценарий, я думаю, но в любом случае:

SELECT id
FROM table
WHERE id > $lastid AND active = 1
ORDER BY id ASC
LIMIT 1

2 голосов
/ 04 сентября 2011
   SELECT id 
    FROM pages
   WHERE id > $current_id AND active = 1
ORDER BY id ASC
   LIMIT 1
1 голос
/ 04 сентября 2011
SELECT id
FROM table
WHERE id < $lastid AND active = 1
ORDER BY id DESC
LIMIT 1

Это должно дать вам именно то, что вы ищете, активную страницу с наибольшим идентификатором ниже, чем текущая страница.

0 голосов
/ 04 сентября 2011

Используйте Codeignier's active record class CIAR

Затем вставьте $this->db->select_max(); в свое приложение для получения максимально возможного идентификатора строк.

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