Maison >base de données >tutoriel mysql >Comment sélectionner les 3 premières lignes de chaque catégorie dans MySQL sans fonctions analytiques ?
Sélection des 3 premières lignes de plusieurs catégories dans MySQL
La sélection des premières lignes de chaque catégorie dans un tableau peut être difficile. Une méthode utilisant des vues et des sous-requêtes, comme indiqué lors de la tentative initiale, peut renvoyer des résultats incorrects.
Une approche plus efficace utilise des fonctions analytiques, que MySQL ne prend pas en charge de manière native. Cependant, il est possible d'émuler ces fonctions à l'aide de variables. Voici comment :
<code class="sql">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;</code>
Cette requête initialise les variables @rownum et @category à l'aide d'une opération JOIN. Elle attribue ensuite un rang à chaque ligne en fonction de sa catégorie, en incrémentant le classement si la catégorie change.
Enfin, la requête sélectionne uniquement les lignes avec un rang de 3 ou moins. Notez que vous devrez peut-être modifier la clause SELECT x.* pour inclure uniquement les colonnes souhaitées.
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!