2015-02-25 4 views
0

Я пытаюсь создать небольшое приложение, которое позволяет использовать бесконечную функцию разбивки на страницы для моего сайта-любителя, это покажет четыре разных видео в небольшом списке, который люди могут выбрать для просмотра, затем они могут щелкнуть «следующая» кнопка, которая показывает следующие 4 видео в базе данных.SQL End of table loop

То, что я хочу сделать, это сделать так, чтобы в каждый конкретный момент список из 4 видео всегда был заполнен, однако в настоящее время это не так, стандартный оператор select позволяет мне выбрать 4 строки из текущего один и отображать их на веб-сайте, однако то, что я хочу сделать, отличается.

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

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

С уважением, Крис.

ответ

2

Используя union вы можете получить данные. Попробуйте что-то вроде этого. Здесь я прохожу @min, @take из приложения. Измените запрос в соответствии с требованием.

declare @min int = 1, @take int = 3 

declare @table table(id int identity(1,1), name varchar(30)) 

insert into @table 
select 'Mary' union 
select 'John'union 
select 'Steve' union 
select 'Lisa' union 
select 'Chris' 

declare @count int = 0, @max int = 0, @take1 int = 0 

select @max = @min + @take 

select @count = count(1) from @table 

if((@max-1) > @count) 
    select @take1 = (@max -1) - @count 

select top (@take) * from 
(
    select row_number() over (order by id) RN, * from @table 
) main 
where rn between @min and @max 

union 

select top (@take1) * from 
(
    select row_number() over (order by id) RN, * from @table 
) child 
where rn between 1 and @take1 

Надеюсь, это поможет.

0

Я чувствую, что вы используете. Ограничение и смещение при одновременном нажатии. Аналогично, если результирующий набор, возвращаемый SQL-запросом, не равен (я имею в виду проверку его в самом php), тогда сделайте ограничение равным 2 и смещен на 1. Это просто простой способ достичь! Надеюсь, это поможет

+0

Существует очевидный способ выполнения запроса, подсчет результатов, а затем выполнение другого запроса с (limit-found) в качестве предела в другом запросе, я просто пытаюсь выяснить, есть ли «правильный» способ сделать это с помощью SQL – Hobbyist

+0

Существует много способов добиться этого, не выполняя это в запросе. Это зависит от того, что вы хотите. Например, вы можете достичь этого, используя jquery. Если результирующий набор равен нулю, вы можете присоединить первый буксир, повторяющий divs до последнего. таким образом, вы показываете только контент из ранее полученного результата. Но только это может быть достигнуто, если вы загружаете через ajax. если вы перезагрузите страницу, как вы можете рассчитывать на получение данных без запроса новой заявки. – Ila