2010-07-27 9 views
1

J'ai une table de produit comme celui-ci:MySQL - lignes de groupe dans 4 de

Product name , Affiliate ID , ProductCode 
a, 1, 1 
b, 1, 2 
c, 1, 3 
d, 1, 5 
e, 1, 7 
f, 2, 4 
g, 2, 6 

Je veux revenir quatre premiers produits de chaque ID d'affiliation. La colonne 'ProductCode' indique l'ordre dans lequel les produits ont été ajoutés. Je peux donc utiliser cette colonne pour trier mes résultats. Mais je ne sais pas comment retourner les quatre premiers résultats de chaque ID d'affilié? Si j'utilise la fonction 'groupe', elle ne renvoie qu'une seule ligne de chaque ID d'affilié.

Répondre

1

Regardez l'exemple dans ce lien:

Within-group quotas (Top N per group)

il est exactement ce dont vous avez besoin.

SELECT AffiliateId, ProductCode 
FROM ( 
    SELECT 
     AffiliateId, ProductCode, 
     IF(@prev <> ID @rownum := 1, @rownum := @rownum+1) AS rank, 
     @prev := ID 
    FROM your table 
JOIN (SELECT @rownum := NULL, @prev := 0) AS r 
ORDER BY AffiliateId, ProductCode 
) AS tmp 
WHERE tmp.rank <= 4 
ORDER BY AffiliateId, ProductCode; 
+0

Merci - oui qui ressemble à ce dont j'ai besoin. Cependant, j'obtiens l'erreur suivante: Requête: SELECT 'nom', productId, image, affiliate_id, productCode FROM (SELECT' nom', productId, image, affiliate_id, ... Code d'erreur: 1064 Vous avez un erreur dans votre syntaxe SQL, consultez le manuel correspondant à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de @rownum: = 1, @rownum: = @ rownum + 1) AS rang, @prev: = ID FROM 'Cu 'à la ligne 5 Heure d'exécution: 00: 00: 00: 000 Temps de transfert: 00: 00: 00: 000 Temps total: 00: 00: 00: 000 –

+0

@Joe Quelle est votre version de mysql? –

+0

MySQL Version 5.0.91 –