Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Mostrar campos de una tabla u otra según condición

Estas en el tema de Mostrar campos de una tabla u otra según condición en el foro de Mysql en Foros del Web. Hola a todos. Estoy diseñando un sistema multidioma en la que se utiliza dos tablas. Para este ejemplo: tabla_Animales y tabla_Animales_lang La primera tabla guarda: ...
  #1 (permalink)  
Antiguo 26/09/2013, 12:24
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 1 mes
Puntos: 1
Pregunta Mostrar campos de una tabla u otra según condición

Hola a todos.

Estoy diseñando un sistema multidioma en la que se utiliza dos tablas. Para este ejemplo:

tabla_Animales y tabla_Animales_lang

La primera tabla guarda:
id_animal, nombre, raza, nacimiento, peso, pelaje

La segunda tabla guarda:
id_animal, id_org_animal, nombre, raza, pelaje, idioma

Es decir, en la segunda sólo se guardan datos que se puedan traducir a otros idiomas. Porque en la primera estarían los textos nativos en español.
id_org_animal es el campo que vincula a esta tabla con la primera.

Ahora viene la duda de cuando el sistema solicita los datos en un concreto a través de una variable de php que incrusta en la consulta MySql.

Para este ejemplo pongamos que la variable puede tomar dos valores:
1 = español
2 = inglés

Pensé en obtener los resultados comparando el idioma de la variable del lenguaje:
Código MySQL:
Ver original
  1. SELECT id_animal AS id,
  2. IF(#var_php#>1, (SELECT (nombre, raza, pelaje) FROM tabla_Animales_lang
  3. WHERE id_org_animal = id AND #var_php#= 3), (nombre, raza, pelaje))
  4. FROM tabla_Animales

Con un campo que se muestre dentro de IF funciona correctamente, pero con varios no es posible.

Se que puedo pasar el contenido en español a la tabla de idiomas y luego mostrar una consulta con INNER JOIN, resultado una combinación de ambas. Pero el problema es que se está adaptado una plataforma ya realizada a varios idiomas...

¿A alguien se le ocurre la manera de mostrar los campos en español de la primera en el caso de que se solicite así, y que muestre para los otros idiomas en determinadas situación?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 26/09/2013, 12:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar campos de una tabla u otra según condición

Cita:
Con un campo que se muestre dentro de IF funciona correctamente, pero con varios no es posible.
Eso no te va a dejar hacerlo con ningun DBMS, incluyendo MySQL.
Una subconsulta aplicada a un único campo de un SELECT, debe forzosamente devolver un único valor. Siempre.
Si quieres que devuelva uno u otro en base a ciertas condiciones, debes hacerlo de modo que siempre termine devolviendo uno.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/09/2013, 12:31
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Mostrar campos de una tabla u otra según condición

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso no te va a dejar hacerlo con ningun DBMS, incluyendo MySQL.
Una subconsulta aplicada a un único campo de un SELECT, debe forzosamente devolver un único valor. Siempre.
Si quieres que devuelva uno u otro en base a ciertas condiciones, debes hacerlo de modo que siempre termine devolviendo uno.
Gracias por contestar Gnzsoloyo.

¿Se te ocurre la manera como debería enfocar la solución para aprovechar lo ya desarrollado?

Un saludo.
  #4 (permalink)  
Antiguo 26/09/2013, 12:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar campos de una tabla u otra según condición

Haciendo una suposición, deberías ser algo como:
Código MySQL:
Ver original
  1. SELECT a.id_animal id, al.nombre, al.raza, al.pelaje
  2. FROM tabla_Animales a INNER JOIN tabla_Animales_lang al ON a.id_animal= al. id_org_animal = id
  3. WHERE al.id_idioma = $idioma

Entendamos que tu esquema está mal diseñado, porque los nombres de las razas los deberías tomar siempre de la misma tabla, y por tanto no deben replicarse campos en la primera.
Sólo debes usar la segunda, incluyendo el idioma castellano (lo siento, en mi infancia me enseñaron que "español" no es un idioma, que lo correcto es "castellano").
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 26/09/2013, 12:41
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 1 mes
Puntos: 1
Respuesta: Mostrar campos de una tabla u otra según condición

Gracias por tu propuesta gnzsoloyo.

Aunque creo entender que es la solución que quería evitar por tiempo de desarrollo global del proyecto.

Etiquetas: campo, campos, condición, join, php, según, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.