Bonjour,
J'ai la requête sql suivante qui affiche des livres :
Pour gérer l'affichage de cette requête (un livre pouvant avoir plusieurs genres), je regroupe la liste de livres par titre grâce à PDO::FETCH_GROUP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $query = $pdo->query("SELECT o.oeuvre_titre, o.oeuvre_id,g.genre_nom,o.oeuvre_titre FROM oeuvre o INNER JOIN figurer f ON o.oeuvre_id = f.fk_oeuvre_id INNER JOIN edition ed ON ed.edition_id = f.fk_edition_id INNER JOIN thematiser th ON o.oeuvre_id = th.fk_oeuvre_id INNER JOIN genre g ON g.genre_id = th.fk_genre_id INNER JOIN exemplaire ex ON ed.edition_id = ex.fk_edition_id");
Ce qui donne l'affichage suivant (conforme à mes attentes) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $result = $query->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP); echo'<pre>'; print_r($result); echo'<pre>'; foreach ($result as $titre => $values) { printf('<h1>%s</h1>', $titre); echo '<ul>'; foreach ($values as $u) { echo '<li>'.$u['genre_nom'].'</li>'; } }
Là où ça se corse, c'est qu'un livre peut aussi (outre avoir plusieurs genres) être classé en plusieurs catégories (roman, documentaire...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Array ( [Le proscrit] => Array ( [0] => Array ( [oeuvre_id] => 1 [genre_nom] => thriller [oeuvre_titre] => Le proscrit ) [1] => Array ( [oeuvre_id] => 1 [genre_nom] => science fiction [oeuvre_titre] => Le proscrit ) ) ) Le proscrit thriller science fiction
A ma requête, je rajoute donc une jointure du style :
Le problème est que l'affichage comporte alors des "doublons d'affichage" (exemple pour un livre ayant 2 genres et 3 catégories) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INNER JOIN classifier cl ON o.oeuvre_id = cl.fk_oeuvre_id INNER JOIN categorie c ON c.categorie_id = cl.fk_categorie_id
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 foreach ($result as $titre => $values) { printf('<h1>%s</h1>', $titre); echo '<ul>'; foreach ($values as $u) { echo '<li>'.$u['categorie_nom'].'</li>'; echo '<li>'.$u['genre_nom'].'</li>'; } }L'affichage que je voudrais obtenir étant plutôt le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Array ( [Le proscrit] => Array ( [0] => Array ( [oeuvre_id] => 1 [genre_nom] => thriller [oeuvre_titre] => Le proscrit [categorie_nom] => roman ) [1] => Array ( [oeuvre_id] => 1 [genre_nom] => thriller [oeuvre_titre] => Le proscrit [categorie_nom] => documentaire ) [2] => Array ( [oeuvre_id] => 1 [genre_nom] => thriller [oeuvre_titre] => Le proscrit [categorie_nom] => ouvrage de référence ) [3] => Array ( [oeuvre_id] => 1 [genre_nom] => science fiction [oeuvre_titre] => Le proscrit [categorie_nom] => roman ) [4] => Array ( [oeuvre_id] => 1 [genre_nom] => science fiction [oeuvre_titre] => Le proscrit [categorie_nom] => documentaire ) [5] => Array ( [oeuvre_id] => 1 [genre_nom] => science fiction [oeuvre_titre] => Le proscrit [categorie_nom] => ouvrage de référence ) ) ) Le proscrit roman thriller documentaire thriller ouvrage de référence thriller roman science fiction documentaire science fiction ouvrage de référence science fiction
Voyez-vous comment parvenir à l'affichage souhaité ? Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Le proscrit roman documentaire ouvrage de référence thriller science fiction
Partager