2013-04-01 4 views
0

J'ai deux tables - article et commande.Jointure interne SQL sur la pagination

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


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

Je veux rejoindre la table en utilisant jointure interne:

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

Mais le problème que je dois faire sur php pagination.

J'ai le code mais je ne sais pas comment le modifier car mon sql n'est pas très bon.

Voici le code (je le modifier et capable d'afficher avec « * », mais ont aucune idée de la façon d'appliquer jointure interne comme ci-dessus sur le code ci-dessous):

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 

Merci à l'avance.

+0

dans votre intérieur requête de jointure, où est-table personnes viennent en cours d'utilisation? ? vous devriez le nommer Item je devine –

+0

Oups, j'ai édité la jointure intérieure. Désolé pour le problème – Genjo

Répondre

1

Mettez votre joindre tableau ci-dessous de la commande:

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

Voici ce que j'ai: [SQL Server] Nom de colonne ambigu "orderID". [message] => [Microsoft] [SQL Server natif client 10.0] [SQL Server] nom de colonne ambigu "ID de commande".) [1] => Tableau ([0] => 42000 [SQLSTATE] => 42000 [1] => 8156 [code] => 8156 [2] => [Microsoft] [SQL Server Native Client 10.0] [SQL Server ] La colonne 'orderID' a été spécifiée plusieurs fois pour '_tmpInlineView'. [Message] => [Microsoft] [SQL Server Native Client 10.0] [SQL Server] La colonne 'orderID' a été spécifiée plusieurs fois pour '_tmpInlineView'.) – Genjo

+0

Vérifiez la mise à jour de la réponse –

+0

Great! Merci beaucoup ! – Genjo

1

Essayez cette

 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 

OU Essayez cette

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

Salut, J'ai essayé et je reçois cette erreur: nom de colonne non valide « état » Et quand je tente de changer de statut à Order.status je reçois: L'identifiant multi-partie « Order.status » ne pouvait pas être lié – Genjo

+0

Vérifiez la réponse mise à jour – Harshil

+0

Merci pour la réponse – Genjo