2013-04-01 3 views
0

У меня есть два стола - Предмет и заказ.SQL внутреннее соединение на разбивке на страницы

Item 
===================== 
ID, ItemName 


Order 
======================== 
orderID, ID , status 

Я хочу присоединиться к таблице с помощью внутреннего соединения:

SELECT Order.orderID, Order.ID, Item.ItemName 
FROM Order 
INNER JOIN Item 
ON Order.ID=Item.ID 

Но проблема мне нужно сделать нумерацию страниц на PHP.

У меня есть код, но я не знаю, как его изменить, так как мой sql не очень хорош.

Вот код (у меня есть изменить его и способен отображать с «*», но не имеют ни малейшего представления о том, как применять внутреннее соединение, как описано выше на ниже код):

SELECT TOP 20 * FROM 
(
SELECT ROW_NUMBER() OVER (ORDER BY Order.orderID) AS RowNumber, *, TotalRows=Count(*) OVER() 
FROM Order WHERE status=1 
) _tmpInlineView 
WHERE RowNumber >= 20 AND status=1 ORDER BY Order.orderID 

Спасибо заранее.

+0

во внутреннем запросе с соединением, где же таблица ЛИЦ приходит в использовании? ? вы должны называть его Item i guess –

+0

К сожалению, я редактировал внутреннее соединение. Извините за беспокойство – Genjo

ответ

1

Положите ваши присоединиться к таблице ниже для заказа:

SELECT TOP 20 * FROM 
(
SELECT ROW_NUMBER() OVER (ORDER BY Order.orderID) AS RowNumber, Order.orderID, Order.ID, Item.ItemName, TotalRows=Count(*) OVER() 
FROM Order INNER JOIN Item 
ON Order.ID=Item.ID WHERE status=1 
) _tmpInlineView 
WHERE RowNumber >= 20 ORDER BY _tmpInlineView.orderID 
+0

Это то, что я получаю: [SQL Server] Неоднозначное имя столбца 'orderID'. [message] => [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Неоднозначное имя столбца 'orderID'.) [1] => Массив ([0] => 42000 [SQLSTATE] => 42000 [1] => 8156 [code] => 8156 [2] => [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server ] Колонка 'orderID' была указана несколько раз для '_tmpInlineView'. [Message] => [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Столбец 'orderID' был указан несколько раз для '_tmpInlineView'.) – Genjo

+0

Проверить обновленный ответ –

+0

Отлично! Большое спасибо ! – Genjo

1

Попробуйте

 SELECT TOP 20 * FROM 
     (
     SELECT ROW_NUMBER() OVER (ORDER BY Order.orderID) AS RowNumber, ORDER.*, 
Count(1) OVER() as TotalRows 
     FROM ORDER INNER JOIN Item ON Order.ID=Item.ID 
     WHERE status=1 
     ) _tmpInlineView 
     WHERE RowNumber >= 20 ORDER BY orderID 

ИЛИ Попробуйте

SELECT * 
    FROM ORDER INNER JOIN Item ON Order.ID=Item.ID WHERE status=1 
    ORDER BY Order.orderID 
    OFFSET (@PageNo - 1) * @RecordsPerPage ROWS 
    FETCH NEXT @RecordsPerPage ROWS ONLY 

The following are the limitations of using Offset Fetch: 
1) Fetch Next can't be used standalone, it requires Offset 
2) Offset can't be used standalone, it requires order by 
3) Top can't be combined with offset fetch next in the same query expression 
+0

Привет, Я попробовал и я получаю эту ошибку: Invalid имя столбца «статус» И когда я пытаюсь изменить статус Order.status я получаю: идентификатор мульти-часть «Order.status» не могут быть связаны – Genjo

+0

Отметить обновленный ответ – Harshil

+0

Спасибо за ответ – Genjo

Смежные вопросы