PHP / MYSQL Query: Получить строку выше и ниже результата! - PullRequest
1 голос
/ 01 марта 2011

Мне как-то нужен способ для следующего:

Пользователь находится на какой-то странице блога Теперь я хочу дать ему возможность перемещаться либо:

На следующую более популярную страницу ИЛИна следующую менее популярную страницу.Значит, что-то вроде этого:

[PAGE 5] | [PAGE 3 (User is here)] | [PAGE 2]

(где страница 1 = самая популярная, страница 3 = наименее популярная).Моя таблица MySQL выглядит следующим образом:

[ID] [VIEWS]
[1] [1000]
[2] [2560]
[3] [3200]
[4] [200]
[5] [4000]

Моя проблема заключается в конкретном запросе.Единственной данной переменной является ID: 2 в этом случае.Может быть, вы можете помочь мне.Просто скажите мне, если вам нужна дополнительная информация.(Мне нужны только два соседа. Страница 4 и т. Д. Не понадобятся.)

Редактировать: @Trevor Нет, извините, я не могу.Я изменил пример, чтобы он стал более понятным.

Ответы [ 4 ]

1 голос
/ 01 марта 2011

ПРИМЕЧАНИЕ : Как выяснилось в различных комментариях, ответ @ mellamokb лучше моего. Я бы удалил этот ответ, но не смог, так как он был принят.

/* Next Page */
SELECT ID
    FROM YourTable
    WHERE VIEWS <= (SELECT VIEWS FROM YourTable WHERE ID = $CurrentPageId)
        AND ID < $CurrentPageId
    ORDER BY VIEWS DESC, ID DESC LIMIT 1

/* Previous Page */
SELECT ID
    FROM YourTable
    WHERE VIEWS >= (SELECT VIEWS FROM YourTable WHERE ID = $CurrentPageId)
        AND ID > $CurrentPageId
    ORDER BY VIEWS, ID LIMIT 1
1 голос
/ 01 марта 2011

Для предыдущей страницы:

  select ID as PreviousId
    from PageViews
   where Views > (select Views From PageViews Where ID = @Id)
      or (
             Views = (select Views From PageViews Where ID = @Id)
             and ID > @id
         )
order by Views ASC, ID DESC
   limit 1

Для следующей страницы:

  select ID as PreviousId
    from PageViews
   where Views < (select Views From PageViews Where ID = @Id)
      or (
             Views = (select Views From PageViews Where ID = @Id)
             and ID < @id
         )
order by Views DESC, ID DESC
   limit 1
0 голосов
/ 01 марта 2011

или

    /* Previous Page */
SELECT ID
    FROM YourTable
    WHERE VIEWS < $CurrentPageViews 
    ORDER BY VIEWS DESC LIMIT 1

/* Next Page */
SELECT ID
    FROM YourTable
    WHERE VIEWS > $CurrentPageViews
    ORDER BY VIEWS LIMIT 1
0 голосов
/ 01 марта 2011

Три запроса:

SELECT @MyID:=ID,@MyViews:=Views FROM Table WHERE ID=2;

Использование локальных «просмотров»:

SELECT ID,Views FROM Table WHERE Views <= @MyViews AND ID != @MyID ORDER BY Views DESC LIMIT 1;
SELECT ID,Views FROM Table WHERE Views >= @MyViews AND ID != @MyID ORDER BY Views ASC LIMIT 1;

И убедитесь, что у вас есть индекс для Views.

...