Une fois la base de données regroupée, obtenez les N premiers enregistrements de chaque groupe
Les données de votre base de données sont organisées en groupes et vous devez extraire les N premiers enregistrements de chaque groupe. Pour ce faire, vous pouvez utiliser les stratégies suivantes :
Méthode UNION ALL :
Utilisez l'opérateur UNION ALL pour combiner les N premiers enregistrements de chaque groupe. Par exemple, si vous avez deux regroupements et que vous souhaitez récupérer les deux premiers enregistrements de chaque regroupement, vous pouvez utiliser :
<code class="language-sql">( SELECT * FROM mytable WHERE `group` = 1 ORDER BY age DESC LIMIT 2 ) UNION ALL ( SELECT * FROM mytable WHERE `group` = 2 ORDER BY age DESC LIMIT 2 )</code>
Méthode du numéro de ligne :
Générez des numéros de ligne pour chaque enregistrement à l'aide de la requête suivante :
<code class="language-sql">SELECT person, `group`, age, (@num:=IF(@group = `group`, @num +1, IF(@group := `group`, 1, 1))) row_number FROM test t CROSS JOIN (SELECT @num:=0, @group:=NULL) c ORDER BY `Group`, Age DESC, person</code>
Cette requête attribue un numéro de ligne à chaque enregistrement de son groupe. Vous pouvez ensuite filtrer les résultats pour récupérer uniquement les enregistrements dont les numéros de lignes sont inférieurs ou égaux à N :
<code class="language-sql">SELECT person, `group`, age FROM ( ... (上述查询) ... ) AS x WHERE x.row_number <= N</code>
Autres méthodes :
L'article xaprb mentionné dans l'article propose d'autres moyens d'obtenir ce résultat, notamment :
La meilleure approche dépend de votre système de base de données spécifique et de vos exigences de performances.
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!