2011-04-11 2 views
0

J'ai besoin du plus récent 4 produit de 4 catégories différentes. cette requête ne fonctionne pasoptimisation de la requête

SELECT 
    ProductID,ProductName,thumb 
    FROM 
    tbproduct 
    WHERE 
    status =2 
GROUP BY 
`CATEGORYID` 
ORDER BY 
`ProductID` DESC 
LIMIT 4 

donc je premier ordre par toute utilisation de records.and requête suivante ...

SELECT 
ProductID, ProductName, thumb 
FROM 
    (
    SELECT 
    ProductID,ProductName,thumb,CATEGORYID 
    FROM 
    tbproduct 
    WHERE 
    status =2 
    ORDER BY 
    `ProductID` DESC 
) AS tmp 
GROUP BY 
`CATEGORYID` 
ORDER BY 
`ProductID` DESC 
LIMIT 4 

cette requête est lente peut me proposer sa requête rapide. Je utilise MySQL.

+0

1. Quel est le point de la requête intérieure s'il n'y a pas de limite là-bas? 2. pouvez-vous montrer l'explication de cette requête? – Pomyk

+0

ne pas utiliser sous-requête, il permettra de réduire la vitesse. Pouvez-vous me dire ce que vous allez obtenir de cette requête? Je ne comprends pas votre besoin. – Sakthi

+0

J'ai besoin de ces produits qui sont le dernier produit selon chaque catégorie. Si je n'utilise que le groupe en suivant par ordre, alors cette requête ne prend pas le dernier enregistrement. donc d'abord je commande par tous les dossiers. – Deepa

Répondre

0
SELECT 
    Max(ProductID), ProductName,thumb 
    FROM 
    tbproduct 
    WHERE 
    status =2 
GROUP BY 
`CATEGORYID` 
ORDER BY 
ProductID DESC 
LIMIT 4 

Cela ne fonctionne-t-il pas?


Vous ne savez pas si cela vous aidera, consultez la requête mise à jour. Voir l'utilisation de Group-by Aggragate.

Remarque: Cela ne renverra pas de façon fiable les autres colonnes. S'il vous plaît regarder ici pour left-self-exclusion join

+0

pas cette requête ne pas apporter le dernier 4 enregistrement de chaque catégorie. donc je n'ai pas utilisé cette requête.Cette requête premier groupe par enregistrement, puis ordre par ces enregistrement qui sont le résultat de groupe par – Deepa

+0

@Nishant: désolé, j'ai posté exactement votre réponse en même temps ... devrais-je supprimer? – Marco

+0

@nishant, @ marco j'ai besoin du plus récent produit 4 de différentes catégories 4 et ces requête ne fonctionnera pas. je l'ai déjà essayé. – Deepa

1

Si vous utilisez simplement:

SELECT 
    ProductID,ProductName,thumb,CATEGORYID 
    FROM tbproduct 
    WHERE status=2 
    GROUP BY CATEGORYID 
    ORDER BY ProductID DESC 
    LIMIT 4 
0
SELECT 
ProductID, ProductName, thumb 
FROM tbproduct 
WHERE ProductID in (
    SELECT max(ProductID) 
    FROM tbproduct 
    WHERE status = 2 
    GROUP BY CATEGORYID 
    ORDER BY ProductID DESC 
    LIMIT 4 
) ORDER BY ProductID DESC 

Cela devrait faire.