2017-08-15 1 views
-2

J'ai une base de données de 750 véhicules, je voudrais lancer une requête où je ne sélectionne pas plus de 5 des véhicules les moins chers pour chaque faire & modèle et les inclure dans mon résultats.Mysql requête 5 voitures les moins chers, plusieurs marques, à partir de table unique

Mes champs de table sont fldYear, fldMake, fldModel, fldRetail etc.

Par exemple, je voudrais la sortie d'inclure les 5 Dodge 200 véhicules moins cher de 25 au total, les 5 moins chères Honda Accord de 30 au total , les 5 Jeep Cherokees les moins chers de 10 au total, et s'il n'y a que 2 Volkswagen Jetta, de les inclure aussi bien. Dans l'exemple ci-dessus, ma sortie aurait un total de 17 enregistrements.

J'ai joué avec Sorts et Group By mais je n'arrive pas à obtenir la sortie désirée.

+4

Qu'avez-vous déjà essayé? Et est-ce le modèle * et * le moins cher? Alors, vous obtiendriez le moins cher 5 VW Golf et 5 VW Polo moins cher, ou juste le moins cher 5 de VW, quel que soit le modèle? – Qirel

+1

Voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être une requête SQL très simple?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -pour-ce-qui-me-semble-à-être-un-très-simple-SQL-requête) – Strawberry

+0

utiliser LIMIT 5 dans la requête, mais c'est une question très paresseuse – lauw

Répondre

1

Il suffit d'utiliser les variables:

SELECT * 
FROM (
    SELECT *, 
      @row := if(fldMake = @make, 
         @row := @row + 1, 
         if(fldMake := @make, 1, 1) 
        ) as row 
    FROM yourCars 
    CROSS JOIN (SELECT @make := '', @row:=0) as vars 
    ORDER BY fldMake, fldRetail ASC 
    ) as T 
WHERE T.row <= 5 
1

Je pense que vous devriez récupérer 5 véhicule moins cher d'une marque et de le mettre dans le tableau ou un objet. Pareil pour les autres marques et après avoir récupéré toutes les données requises, vous pouvez les fusionner dans un nouveau tableau.

+0

pas très efficace , vérifie ma réponse. –

+0

ouais ce n'est pas la manière efficace mais c'est la dernière option si toute la requête essayée ne fonctionne pas. –

+0

Merci pour les réponses, très appréciées. J'ai dû enlever le: devant les signes égaux, sinon j'avais une erreur de syntaxe. La requête ci-dessous renvoie tous les véhicules. –