Je suis confronté à la situation suivante.Tri complexe sur base de données MySQL
Nous avons un CMS avec une entité avec des traductions. Ces traductions sont stockées dans une table différente avec une relation un-à-plusieurs. Par exemple newsarticles
et newsarticle_translations
. La quantité de languages
disponible est déterminée dynamiquement par le même CMS.
Lors de la saisie d'un nouvel article de presse, l'éditeur doit entrer au moins une traduction, dont l'une des langues disponibles est celle qui lui appartient. Dans l'aperçu des articles de notre CMS, nous aimerions montrer une colonne avec le titre de l'article (traduit), mais comme aucune des langues n'est obligatoire (l'une d'entre elles est obligatoire mais je ne sais pas laquelle) i Je ne sais pas vraiment comment construire ma requête mysql pour sélectionner un titre pour chaque article, quelle que soit la langue saisie.
Et pour rendre le tout un peu plus difficile, notre responsable a demandé la possibilité de trier aussi le titre, donc l'extraction des traductions dans une requête séparée est exclue pour autant que je sache.
Quelqu'un a une idée sur la façon de résoudre le problème de la manière la plus efficace?
Voici l'il de mon schéma de la table, il pourrait aider
> desc news;
+-----------------+----------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------------+------+-----+-------------------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| category_id | int(1) | YES | | NULL | |
| created | timestamp | NO | | CURRENT_TIMESTAMP | |
| user_id | int(10) | YES | | NULL | |
+-----------------+----------------+------+-----+-------------------+----------------+
> desc news_translations;
+-----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| enabled | tinyint(1) | NO | | 0 | |
| news_id | int(1) unsigned | NO | | NULL | |
| title | varchar(255) | NO | | | |
| summary | text | YES | | NULL | |
| body | text | NO | | NULL | |
| language | varchar(2) | NO | | NULL | |
+-----------------+------------------+------+-----+---------+----------------+
PS: J'ai bien sur les sous-requêtes et Coalesce solutions() mais semblent les trucs plutôt sales, se demandant si quelque chose de mieux savoir que je suis ne pense pas?
Serait-il logique d'avoir aussi un champ 'title' dans le tableau' news' qui serait utilisé comme titre par défaut un article de nouvelles? Même si c'est seulement pour l'utilisation backend? –
Ce serait, mais ce genre de redondance serait mon dernier recours. Je suis à la recherche d'une solution plus propre/meilleure, mais merci pour la suggestion. – ChrisR
Peut-être un LEFT JOIN? – Benubird