Très souvent une requête SELECT va renvoyer un ensemble d'enregistrements. Pour traiter cet ensemble le plus simple est d'utiliser une boucle while sous la forme suivante :

while ($enr = mysqli_fetch_assoc($r)) {
	... traitement de l'enregistrement ...
}

On utilise le principe du raccourci vu précédemment :

Fonctionnement interne de mysqli_fetch_assoc() :

L'exemple suivant sélectionne tous les auteurs de la base de données de test.

Exemple : sélection multiple

Ce qui est intéressant avec les sélections d'un ensemble d'éléments, c'est qu'on peut demander que les résultats soient triés (ORDER BY) selon un ou plusieurs champs, et par ordre croissant (ASC : valeur par défaut) ou par ordre décroissant (DESC).

L'exemple suivant sélectionne le titre de tous les livres, leur année de parution et le nom de l'éditeur. La sélection est triée par année en ordre décroissant (ie les nouveautés en début de liste).

Exemple : sélection multiple ordonnée

On peut aussi utiliser la clause GROUP BY pour regrouper des éléments et effectuer des calculs avec des fonctions comme count, sum, min ... (documentation MySQL ici ).

L'exemple suivant sélectionne le nom des éditeurs et le nombre de livres proprosés. La sélection est triée par nom. A noter l'utilisation d'un alias pour nommer le résultat de la fonction count.

Exemple : sélection multiple ordonnée et groupée

Si on voulait trier les résultats par nombre de livres, il suffit d'utiliser le nom de l'alias dans la clause ORDER BY comme par exemple :
ORDER BY nbLivres, edNom ou
ORDER BY nbLivres DESC, edNom.

Si on voulait récupérer tous les noms des éditeurs, y compris ceux qui ne proposent pas de livres, il faudrait utiliser une jointure externe et compter le nombre de lignes avec un champ liID non NULL. On pourrait donc utiliser la requête suivante :
SELECT edNom, count(liID) as nbLivres
FROM editeurs
     LEFT OUTER JOIN livres ON liIDEditeur = edID
GROUP BY edNom
ORDER BY edNom