Me enfrento a la siguiente situación.Clasificación compleja en la base de datos MySQL
Tenemos un CMS con una entidad con traducciones. Estas traducciones se almacenan en una tabla diferente con una relación de uno a muchos. Por ejemplo, newsarticles
y newsarticle_translations
. La cantidad de languages
disponible se determina dinámicamente por el mismo CMS.
Al ingresar un nuevo artículo, el editor debe ingresar al menos una traducción, que uno de los idiomas disponibles que elija depende de él.
En la descripción del nuevo artículo en nuestro CMS nos gustaría mostrar una columna con el título del artículo (traducido), pero como ninguno de los idiomas es obligatorio (uno de ellos es obligatorio pero no sé cuál) realmente no sé cómo construir mi consulta mysql para seleccionar un título para cada nuevo artículo, independientemente del idioma ingresado.
Y para hacerlo todo un poco más difícil, nuestro gerente pidió la posibilidad de también poder ordenar el título, por lo que descartar las traducciones en una consulta separada se descarta por lo que yo sé.
¿Alguien tiene una idea sobre cómo resolver esto de la manera más eficiente?
Éstos son que mi mesa de esquema que podría ayudar
> 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: He aunque sobre subconsultas y se unen() soluciones, pero los trucos parecen más bien sucios, preguntándose si algo mejor es saber que estoy no pensando en?
tendría sentido tener también un 'title' campo en la tabla' news' que sería utilizado como el título predeterminado para un artículo de noticias? Incluso si es solo para uso de back-end? –
Sería pero ese tipo de redundancia sería mi último recurso. Estoy buscando una solución más limpia/mejor, pero gracias por la sugerencia. – ChrisR
Quizás un IZQUIERDA ÚNETE? – Benubird