Bonjour,

J'ai la requête sql suivante qui affiche des livres :
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");
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
 
$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>';
 
    }
 
}
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
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
Là où ça se corse, c'est qu'un livre peut aussi (outre avoir plusieurs genres) être classé en plusieurs catégories (roman, documentaire...).
A ma requête, je rajoute donc une jointure du style :
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
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
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>';
 
    }
 
}
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
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
 
Le proscrit
    roman
    documentaire
    ouvrage de référence
    thriller
    science fiction
Voyez-vous comment parvenir à l'affichage souhaité ? Merci.