Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/12/2009, 06:29
gr0uch0mars
 
Fecha de Ingreso: diciembre-2009
Ubicación: Madrid
Mensajes: 16
Antigüedad: 14 años, 4 meses
Puntos: 0
Seleccionar valor de una tabla u otra para ordenar

Tengo una base de datos de libros con dos tablas, una con la lista de libros que tengo, y la otra con la lista de títulos alternativos (traducciones) de esos libros:
- Books: ID, title (título original del libro)
- Books_titles: book_id, book_title (título traducido a otro idioma), title_lang (código de 2 letras)

Quiero poder sacar una lista de títulos de libros ordenados por título en un idioma específico, es decir, si la quiero ordenar por los títulos en Español, me ordene la tabla Books según los títulos (Books_titles.book_title) en español (title_lang = 'es'). Pero dado que no todos los libros en Books tienen un título traducido (es decir, no tienen entrada en Books_titles), si no hay entrada en Books_titles me tendría que coger para ordenar el campo Books.title.

Sé que es una mezcla engorrosa, pero no se me ocurre otra idea para poner los títulos traducidos, y tampoco sé cómo listar en un determinado idioma.

Por ahora tengo estos problemas:

===> No selecciona los libros que no tengan ese title_lang (y debería seleccionarlos, pero poniendo Books.title como título a ordenar):

SELECT books.id, IF(books_titles.title_lang = 'fr',books_titles.book_title,books.title) AS titulo
FROM `books`, `books_titles`
WHERE books_titles.`title_lang` = 'fr' AND books.id = books_titles.book_id
GROUP BY books.id
ORDER BY titulo

ó

SELECT books.*, IF(books_titles.title_lang = 'fr', books_titles.book_title, books.title) AS titulo
FROM books
JOIN books_titles ON books.id=books_titles.book_id AND books_titles.title_lang = 'fr'
GROUP BY books.id

ó

SELECT books.*, books_titles.book_title
FROM books
JOIN books_titles ON books.id=books_titles.book_id AND books_titles.title_lang = 'fr'
GROUP BY books.id

===> No obtiene el Books.ID ni Books.title (pone NULL), al no haber titulo en el idioma 'fi', pero saca los libros correctamente:

SELECT books.id, books.title, books_titles.book_title
FROM books
RIGHT JOIN books_titles ON books.id=books_titles.book_id AND books_titles.title_lang = 'fi'
GROUP BY books.id


===> Para cada título en books_titles hace el IF, y saca cuatro veces el Book.ID = '1' si hay cuatro traducciones del título en Books_titles:

SELECT books.id, books.title, IF(books_titles.title_lang = 'fi', books_titles.book_title, books.title) AS titulo
FROM books, books_titles
WHERE books.id = books_titles.book_id
ORDER BY titulo

Llevo mucho tiempo intentando encontrar una solución. Si alguien sabe cómo resolverlo, o tiene alguna idea de cómo almacenar los títulos traducidos de otra forma más fácil/lógica/útil, bienvenido sea.

Gracias.