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

[MySQL] Ayuda con Condiciones Lógicas, excluir algunos resultados

Estas en el tema de [MySQL] Ayuda con Condiciones Lógicas, excluir algunos resultados en el foro de Bases de Datos General en Foros del Web. tengo una tabla con la siguiente estructura con 4 campos: * lang_id (VARCHAR) * s_context (VARCHAR) * s_code (VARCHAR) * sentence (TEXT) la uso para ...
  #1 (permalink)  
Antiguo 05/09/2005, 22:33
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
[MySQL] Ayuda con Condiciones Lógicas, excluir algunos resultados

tengo una tabla con la siguiente estructura con 4 campos:
* lang_id (VARCHAR)
* s_context (VARCHAR)
* s_code (VARCHAR)
* sentence (TEXT)

la uso para recoger ciertas frases en el idioma q sea necesario.

el problema es q mi idea es recoger un listado de ciertas frases de igual contexto, teniendo en cuenta q los necesito en un idioma en especifico, pero de no existir algun registro en ese idioma, recoja los restantes en otro idioma que le llamo 0 (cero).

por ejemplo si los registros existentes fueran:

es | mod | 1 | Modulo n1
es | mod | 2 | Modulo n2
es | mod | 3 | Modulo n3
0 | mod | 1 | MOD 1
0 | mod | 2 | MOD 2
0 | mod | 3 | MOD 3
0 | mod | 4 | MOD 4

quiero que el resultado sea:

es | mod | 1 | Modulo n1
es | mod | 2 | Modulo n2
es | mod | 3 | Modulo n3
0 | mod | 4 | MOD 4

osea que me recoja todos los registros del mismo contexto donde si existe en el idioma pedido (e este caso español) sino, en el idioma 0.

con esta consulta:
Código:
SELECT * FROM site_sentences WHERE s_context = 'block' AND (lang_id = 'es' OR lang_id = '0')
logre hacer algo pero me recoge los registros de los 2 idiomas, no puedo excluir que cuando exista un registro en un idioma no recoja el registro existente con el idioma 0

¿como puedo hacerlo?
  #2 (permalink)  
Antiguo 06/09/2005, 01:21
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
Prueba esto, a ver que tal:

Código PHP:
(select from site_sentences where s_context 'block' and lang_id='es'union (select from site_sentences where s_context 'block' and s_code not in (select s_code from site_sentences where s_context ='block' and lang_id ='es')); 
  #3 (permalink)  
Antiguo 06/09/2005, 14:51
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
vale, ahora se me ocurrio para hacerlo en un OR dentro de un JOIN y me resulta ok,
el problema es q funca en mysql 4.1 en adelante, mysql 4.0 no soporta subselects, conoces alguna alternativa para llegar a lo mismo? una forma de reescribir el IN ?
  #4 (permalink)  
Antiguo 07/09/2005, 00:55
 
Fecha de Ingreso: agosto-2005
Mensajes: 101
Antigüedad: 18 años, 8 meses
Puntos: 0
Pues he estado mirando pero no se me ocurre nada mas, lo siento, a ver si alguien más te puede ayudar.
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 11:36.