Bonjour
voilà je suis en train de réaliser en php/mysql une application pour gérer mes mp3 et pouvoir ensuite générer des playlist (lisibles par xmms) répondant à certains critères.
j'utilise mysql 4.0.22.
j'ai une table `playlist_files`, une table `artiste`, une table `genre` et une table de jointure `file_genre` car un même fichier peut appartenir à plusieurs genres.
voilà un résumé de la structure de mes tables et des enregistrements de test.
les enregistrements :
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 mysql> SHOW COLUMNS FROM playlist_files; +---------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+----------------------+------+-----+---------+----------------+ | id | tinyint(3) unsigned | | PRI | NULL | auto_increment | | artiste | smallint(5) unsigned | YES | MUL | NULL | | | live | tinyint(1) | | | 0 | | | dure | tinyint(3) unsigned | YES | | NULL | | | name | tinytext | | | | | | path | tinytext | | | | | +---------+----------------------+------+-----+---------+----------------+ 6 rows in set (0.68 sec) mysql> SHOW COLUMNS FROM artiste; +-------------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | | PRI | NULL | auto_increment | | nom | varchar(32) | | | | | | description | tinytext | YES | | NULL | | +-------------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec) mysql> SHOW COLUMNS FROM genre; +-------------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | | PRI | NULL | auto_increment | | nom | varchar(32) | | | | | | description | tinytext | YES | | NULL | | +-------------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.02 sec) mysql> SHOW COLUMNS FROM file_genre; +----------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+-------+ | id_genre | smallint(5) unsigned | | PRI | 0 | | | id_file | tinyint(3) unsigned | | PRI | 0 | | +----------+----------------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)pour séléctionner des enregistrements selon certains critères c'est assez simple.
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 mysql> SELECT * FROM playlist_files; +----+---------+------+------+---------------------+-------------+ | id | artiste | live | dure | name | path | +----+---------+------+------+---------------------+-------------+ | 1 | 1 | 0 | NULL | Tourniquet | /mnt/blabla | | 2 | 1 | 0 | NULL | Going Under | /mnt/truc | | 3 | 2 | 0 | NULL | Fortresse of teares | /mnt/machin | +----+---------+------+------+---------------------+-------------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM artiste; +----+-------------+-----------------------------+ | id | nom | description | +----+-------------+-----------------------------+ | 1 | Evanescence | Les meilleurs des meilleurs | | 2 | Him | Un bon groupe | +----+-------------+-----------------------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM genre; +----+----------+-------------+ | id | nom | description | +----+----------+-------------+ | 1 | rock | NULL | | 2 | métal | NULL | | 3 | gothique | NULL | +----+----------+-------------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM file_genre; +----------+---------+ | id_genre | id_file | +----------+---------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 1 | 2 | | 2 | 2 | | 3 | 2 | | 1 | 3 | +----------+---------+ 7 rows in set (0.00 sec)
mais moi j'aimerai tout sélectionner (enfin avec une limite quand même) et en particulier avoir tous les genres auquel appartient un fichier.
j'ai essayé une requête comme ça, mais seul le premier groupe sortet sans le GROUP BY:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 mysql> SELECT p.name, p.dure, a.nom AS artiste, g.nom AS genre -> FROM playlist_files AS p LEFT JOIN artiste AS a ON (p.artiste=a.id) -> LEFT JOIN file_genre AS f ON (f.id_file=p.id) -> INNER JOIN genre AS g ON (g.id=f.id_genre) -> GROUP BY p.id ORDER BY p.name ASC; +---------------------+------+-------------+-------+ | name | dure | artiste | genre | +---------------------+------+-------------+-------+ | Fortresse of teares | NULL | Him | rock | | Going Under | NULL | Evanescence | rock | | Tourniquet | NULL | Evanescence | rock | +---------------------+------+-------------+-------+ça on pouvais s'y attendre, mais c'est pas ce que je veux.
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 mysql> SELECT p.name, p.dure, a.nom AS artiste, g.nom AS genre -> FROM playlist_files AS p LEFT JOIN artiste AS a ON (p.artiste=a.id) -> LEFT JOIN file_genre AS f ON (f.id_file=p.id) -> INNER JOIN genre AS g ON (g.id=f.id_genre) -> ORDER BY p.name ASC; +---------------------+------+-------------+----------+ | name | dure | artiste | genre | +---------------------+------+-------------+----------+ | Fortresse of teares | NULL | Him | rock | | Going Under | NULL | Evanescence | rock | | Going Under | NULL | Evanescence | métal | | Going Under | NULL | Evanescence | gothique | | Tourniquet | NULL | Evanescence | rock | | Tourniquet | NULL | Evanescence | métal | | Tourniquet | NULL | Evanescence | gothique | +---------------------+------+-------------+----------+
moi j'aimerai pouvoir récupérer quelque chose comme ça :mais je ne sais pas du tout si une fonction de mysql permet de le faire ou même si c'est possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 +---------------------+------+-------------+-----------------------+ | name | dure | artiste | genre | +---------------------+------+-------------+-----------------------+ | Fortresse of teares | NULL | Him | rock | | Going Under | NULL | Evanescence | rock, métal, gothique | | Tourniquet | NULL | Evanescence | rock, métal, gothique | +---------------------+------+-------------+-----------------------+
dans tous les cas j'aimerais éviter de devoir effectuer une requête par fichier pour récupérer les genres, sinon le nombre de requête risque d'être très important.
je suis prêt à accepter toutes les propositions quel qu'elle soit; je fais ça pour moi, je n'ai aucune contrainte exterieur.
voilà, je sais que ça fait un long message avec beaucoup de balise code.
merci d'être arrivé jusqu'au bout de mon message, et merci aussi à ceux qui m'apporteront de l'aide.
ps : je sais que le titre est assez maladroit, mais je n'ai rien trouvé de mieux comme titre à mon problème.
Partager