exemple :
+----+-----------+----------+-------+
| id | firstname | lastname | city |
+----+-----------+----------+-------+
| 1 | Jean | Machin | Paris |
| 2 | Jean | Truc | Nice |
| 3 | Paul | Bla | Nice |
+----+-----------+----------+-------+
on a envie de trier les utilisateurs par ville pour avoir une sortie type :Code : Tout sélectionner
Paris
Jean Machin
Nice
Jean Truc
Paul Bla- Faire une requête DISTINCT sur les villes, et a chaque tour de boucle allé chercher les personnes qui correspondes
- Créer un array temporaire et a chaque tour de boucle ajouter la personne ($tmp[$user['city']][] = $user) , et reboucler ensuite pour créer son tableau
- A chaque tour de boucle vérifier via un buffer si la ville a été mise et afficher les personnes, sinon afficher ville
Grâce au fetchAll et son option PDO::FETCH_GROUP, on a en sortie directement un array formateé, avec en clé la catégorie et en valeur les entrées correspondantes
(par contre attention contraiement a PDO::FETCH_COLUMN, on ne choisie pas qui est la catégorie, ca sera uniquement la première colonne)
exemple de code :
try
{
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch (Exception $e)
{
exit($e->getMessage());
}
$query = $pdo->query("SELECT u.city, u.id, u.firstname, u.lastname FROM test_user u");
if($query)
{
$result = $query->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
print_r($result);
}
en sortieCode : Tout sélectionner
Array
(
[Paris] => Array
(
[0] => Array
(
[id] => 1
[firstname] => Jean
[lastname] => Machin
)
)
[Nice] => Array
(
[0] => Array
(
[id] => 2
[firstname] => Jean
[lastname] => Truc
)
[1] => Array
(
[id] => 3
[firstname] => Paul
[lastname] => Bla
)
)
)
Si on veux que la catégorie sois un autre champs il suffis de le mettre en premier (le prénom par exemple)
SELECT u.firstname, u.id, u.lastname, u.city FROM test_user uCode : Tout sélectionner
Array
(
[Jean] => Array
(
[0] => Array
(
[id] => 1
[lastname] => Machin
[city] => Paris
)
[1] => Array
(
[id] => 2
[lastname] => Truc
[city] => Nice
)
)
[Paul] => Array
(
[0] => Array
(
[id] => 3
[lastname] => Bla
[city] => Nice
)
)
)
SELECT u.city, u.id, u.firstname, u.lastname, u.city FROM test_user u
-- ou version raccourcis
SELECT u.city, u.* FROM test_user uCode : Tout sélectionner
Array
(
[Paris] => Array
(
[0] => Array
(
[id] => 1
[firstname] => Jean
[lastname] => Machin
[city] => Paris
)
)
[Nice] => Array
(
[0] => Array
(
[id] => 2
[firstname] => Jean
[lastname] => Truc
[city] => Nice
)
[1] => Array
(
[id] => 3
[firstname] => Paul
[lastname] => Bla
[city] => Nice
)
)
)