Requête MySQL : sélection des deux meilleurs articles de chaque catégorie
Dans MySQL, il est souvent possible d'extraire un nombre spécifié de lignes d'une table en utilisant la clause LIMIT. Toutefois, lorsque l’exigence consiste à sélectionner plusieurs lignes en fonction du regroupement, une approche différente est nécessaire. Cet article traite d'un scénario spécifique dans lequel deux lignes doivent être sélectionnées dans chaque catégorie d'un tableau.
À l'origine, l'utilisateur tentait d'y parvenir en créant une vue pour limiter les lignes et en utilisant ensuite une sous-requête pour récupérer le résultat souhaité. enregistrements. Cependant, cette approche n'a abouti qu'à deux enregistrements au total.
La solution réside dans l'utilisation de ce que l'on appelle communément les fonctions de fenêtrage. MySQL ne prend pas en charge nativement les fonctions de fenêtrage, mais il est possible d'émuler leurs fonctionnalités à l'aide de variables définies par l'utilisateur comme suit :
SELECT x.* FROM ( SELECT t.*, CASE WHEN @category != t.category THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, @category := t.category AS var_category FROM TBL_ARTIKUJT t JOIN (SELECT @rownum := NULL, @category := '') r ORDER BY t.category ) x WHERE x.rank <= 3;
Dans cette requête révisée :
Cette approche émule efficacement les fonctions de fenêtrage pour regrouper et sélectionner les lignes souhaitées dans chaque catégorie. Si l'intention est de récupérer uniquement les colonnes d'origine, la requête externe peut être modifiée pour spécifier des noms de colonnes spécifiques au lieu de x.*.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!