Maison > base de données > tutoriel mysql > Comment sélectionner les 3 premières lignes de chaque catégorie dans une table MySQL sans utiliser de fonctions analytiques ?

Comment sélectionner les 3 premières lignes de chaque catégorie dans une table MySQL sans utiliser de fonctions analytiques ?

Linda Hamilton
Libérer: 2024-10-29 14:58:02
original
426 Les gens l'ont consulté

How to Select the Top 3 Rows from Each Category in a MySQL Table Without Using Analytic Functions?

Requête MySQL : sélection des 3 premières lignes de chaque catégorie dans une table

Dans ce scénario, vous disposez d'une table avec de nombreux enregistrements, classés par catégorie. Votre objectif est de récupérer uniquement les trois meilleurs articles de chaque catégorie. Pendant que vous essayiez une solution utilisant les vues et LIMIT, cela a abouti à un nombre limité d'enregistrements.

Pour relever ce défi, il est nécessaire d'utiliser des fonctions analytiques, qui manquent à MySQL. Cependant, vous pouvez obtenir un effet similaire en utilisant des variables :

<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>
Copier après la connexion

Cette requête utilise les variables @rownum et @category pour suivre le classement des lignes au sein des catégories. Il commence par définir les deux variables sur des valeurs NULL/vides.

Pour chaque ligne du tableau (alias "t"), il vérifie si la catégorie actuelle diffère de la précédente. Si c'est le cas, il attribue 1 à @rownum ; sinon, il incrémente @rownum de 1. Simultanément, il attribue la catégorie actuelle à @category pour conserver le contexte de comparaison dans les lignes suivantes.

Le résultat est un tableau temporaire qui classe chaque ligne dans sa catégorie. La clause WHERE finale filtre ensuite cette table temporaire pour afficher uniquement les lignes dont le rang est égal ou inférieur à 3.

N'oubliez pas d'ajuster les références de colonnes dans la clause SELECT externe (x.*) pour qu'elles correspondent aux colonnes que vous souhaitez récupérer.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal