Choix d'une traduction si possible dans une table
Bonjour,
J'avais par le passé réglé ce problème avec un bon
Code:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
mais bon c'est pas super.
Aujourd'hui j'aimerais trouver une solution propre à mon problème, mais rien à faire.
J'ai une table place avec un id et des données quelconques.
Une table tag :
Code:
1 2 3 4 5 6 7 8
| +----+--------+
| id | code |
+----+--------+
| 1 | actor |
| 2 | cinema |
| 3 | music |
| 4 | death |
+----+--------+ |
Une table places_tags qui fait un many to many entre les 2 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
+----------+--------+
| place_id | tag_id |
+----------+--------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
| 3 | 1 |
| 3 | 4 |
| 4 | 3 |
+----------+--------+ |
Et enfin tag_string qui propose des titres traduits aux tags :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
+----+--------+---------+----------+
| id | tag_id | title | language |
+----+--------+---------+----------+
| 1 | 1 | Acteur | fr |
| 2 | 1 | Actor | en |
| 3 | 2 | Cinéma | fr |
| 4 | 2 | Cinema | en |
| 5 | 2 | Cine | es |
| 6 | 3 | Musique | fr |
| 7 | 3 | Music | en |
| 8 | 4 | Mort | fr |
| 9 | 4 | Death | en |
+----+--------+---------+----------+ |
Avant, dans le meilleur des mondes sales, je faisais ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
SELECT t.id, ts.title AS title, COUNT(pt.tag_id) AS total
FROM tag AS t
INNER JOIN places_tags AS pt
ON pt.tag_id = t.id
INNER JOIN (
SELECT ts2.tag_id, ts2.title AS title
FROM tag_string AS ts2
ORDER BY FIELD (ts2.language, 'en', 'fr') DESC
) ts
ON ts.tag_id = t.id
GROUP BY t.id
ORDER BY total DESC |
Ce qui me donnait tous les tags avec de préférence un titre en français, sinon en anglais.
Mais aujourd'hui, cela ne fonctionne plus (le group by me jette je vois bien pourquoi).
Cependant, je ne trouve pas de solution.
Quelqu'un aurait-il une solution pour me sortir de ce pétrin ?
J'ai mis ce que ça donnait en ligne ici : http://sqlfiddle.com/#!9/0d9c3b/1
Merci