Bonjour,
Dans une base contenant une liste de film, je cherche a sortir le titre de chaque film dans une langue en particulier.
Jusque là c'est simple, le problème c'est que pour certains films il se peut qu'il n'y ai pas de titre en français donc si je demande a récuperer tous les titres en français il va y avoir des trous.
Il faut donc que lorsque le titre français n'est pas disponible, je récupère à la place le titre en anglais.
voici un exemple simplifié de la base, on s'encombre pas des jointures pour une meilleure compréhension:
film_id titre language status 1 les veuves fr 0 1 widows en 0 2 rambo fr 0 3 spiderman en 0 3 spiderman fr 0 3 spiderman cn 0 4 Hobbit fr 1 4 Hobbit cn 0 4 Hobbit en 0
En sortie il me faut ceci dans le cas ou je demande les titres en français
film_id titre language 0 1 les veuves fr 0 2 rambo fr 0 3 spiderman fr 0 4 Hobbit en 0
j'ai fait ça et cela a l'air de marcher si on veut sortir le 'fr' avec 'en" par defaut voir n'importe quel autre language ensuite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT f.film_id film_id, f.titre titre, f.language lang, f.status stat, MIN(CASE WHEN f.language = 'fr' THEN 1 WHEN f.language = 'en' THEN 2 ELSE 3 END ) AS preference FROM films f WHERE f.status = 0 GROUP BY f.film_id
mais si j'essaie de sortir en 1er 'en' puis 'fr' puis n'importe quel language:
ça ne va plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT f.film_id film_id, f.titre titre, f.language lang, f.status stat, MIN(CASE WHEN f.language = 'en' THEN 1 WHEN f.language = 'fr' THEN 2 ELSE 3 END ) AS preference FROM films f WHERE f.status = 0 GROUP BY f.film_id
Est ce que quelqu'un saurait comment tourner cette requête ?
Pour ceux qui veulent faire des essai, voici de quoi recreer la table:
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 CREATE TABLE IF NOT EXISTS `films` ( `id` int(11) NOT NULL AUTO_INCREMENT, `film_id` int(11) NOT NULL, `titre` varchar(255) NOT NULL, `language` varchar(2) NOT NULL, `status` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=utf8; -- -- Déchargement des données de la table `films` -- INSERT INTO `films` (`id`, `film_id`, `titre`, `language`, `status`) VALUES (1, 1, 'les veuves', 'fr', 0), (2, 1, 'widows', 'en', 0), (3, 2, 'rambo', 'fr', 0), (4, 3, 'spiderman', 'en', 0), (5, 3, 'spiderman', 'fr', 0), (6, 3, 'spiderman', 'cn', 0), (7, 4, 'hobbit', 'fr', 1), (8, 4, 'hobbit', 'cn', 0), (9, 4, 'hobbit', 'en', 0);
Partager