Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/11/2008, 15:43
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Condicional en un where

Dos sugerencias:
1) crear un campo traddefault o algo así, y poner en él la traducción, y otro campo langdefault, y así en el caso de password para cat, escribiría en traddefault password y en langdefault ang. Sólo tendrías que escribir los datos default cuando faltara el lang_name, como en ese caso. Luego en la selección condiciono a que si el campo lang_name está vacío, se traiga como malg_code ang y como lang_name el dato de langdefault, es decir, password.
Código sql:
Ver original
  1. SELECT IF(lang_name="", traddefault, lang_name) trad, IF(lang_name="", langdefault, malg_code) lengua FROM userstc_malg WHERE malg_code = "cat" AND col_name = "password"

2) Otra opción es hacerlo con programación. En la consulta te traes siempre el valor de cat y el de ang. Luego cargas en tu programa y si el valor de lang_name de cat está vacío, usaría el de ang.

Código sql:
Ver original
  1. SELECT lang_name, malg_code
  2. FROM userstc_malg
  3. WHERE col_name = "password"
  4. AND (
  5. malg_code = "cat"
  6. OR malg_code = "ang"
  7. )
  8. ORDER BY malg_code DESC
ordeno descendente para que siempre cargue el inglés, ang, al final, y poder procesar antes las demás lenguas...
Pero si quieres una solución rebuscada con MySQL, puedes lanzar una consulta como esta:


Código sql:
Ver original
  1. SELECT u.col_name, IF( t1.trad = '', u.malg_code, t1.leng ) lengua, IF( t1.trad = '', u.lang_name, t1.trad ) traduccion
  2. FROM userstc_malg u
  3. INNER JOIN (
  4.  
  5. SELECT col_name col, malg_code leng, lang_name trad
  6. FROM `userstc_malg`
  7. WHERE col_name = "password"
  8. AND malg_code = "cat"
  9. )t1 ON t1.col = u.col_name
  10. WHERE u.col_name = "password"
  11. AND u.malg_code = "ang"

Se trae en el centro mediante selección el valor para cat, luego realiza un inner join con la consulta que se trae eso mismo para ang, usando como union el valor del campo col_name, que es password, y muestra, en el caso de que lang_name de la segunda consulta sobre cat esté vacío, el lang_name de ang, y también el malg_code...

Yo no recomiendo hacer dos consultas sobre la misma tabla, cuando podrías resolverlo con una y cargando con programación, o resolviendo mediante esos campos default.

Es lo que se me ocurre.

Última edición por jurena; 11/11/2008 a las 17:16