Foros del Web » Programando para Internet » PHP »

Consulta OR excluyente en mi DB Mysql

Estas en el tema de Consulta OR excluyente en mi DB Mysql en el foro de PHP en Foros del Web. Ya hice esta pregunta en Bases de Datos, pero como se que aki usan mucho Mysql, me decidi a preguntarles también. Es acerca de una ...
  #1 (permalink)  
Antiguo 05/09/2005, 23:42
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 15 años, 1 mes
Puntos: 4
Consulta OR excluyente en mi DB Mysql

Ya hice esta pregunta en Bases de Datos, pero como se que aki usan mucho Mysql, me decidi a preguntarles también. Es acerca de una consulta q me esta rompiendo al cabeza.

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 (en este caso español) sino, en el idioma 0.

con esta consulta:
Código:

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?, uso Mysql 4.0, pero me gustaría en lo posible que a consulta sirva en otras versiones de Mysql
  #2 (permalink)  
Antiguo 06/09/2005, 00:01
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 5 meses
Puntos: 2
Hola, primero debo decirte que seguramente cierren en thread si esta repetido, segundo no dudo que no se pueda hacer (seguramente alguien lo debe saber hacer) pero tienes algo encontra de usar 2 consultas?. Esto lo digo porque podrias hacer una consulta sobre el idioma que necesitas, luego con mysql_num_rows() verificas si ha devuelto algun resultado, y entonces te fijas si necesitas de la consulta que encierra al idioma "0", creo que seria una solución más rapida que practica. Ahora segun como describes la consulta veo que también necesitas que sean correlativo, o me equivoco?
Cita:
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
Ya en este tema no se me ocurre nada en estos momentos.

Saludos y suerte.
  #3 (permalink)  
Antiguo 06/09/2005, 00:10
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 15 años, 1 mes
Puntos: 4
= podria hacerlo, pero pierde rendimiento por hacer 2 consultas, además hacer algo por el lado del lenguaje procedural. eso es lo unico q tengo en contra de hacer 2 consultas.

Lo otro es que haciendo un JOIN doble me salen el doble de registros y con un JOIN triple me salen 8 esperando 1 (aumenta exponencialmente)

imaginate q consultando 10 noticias con el JOIN triple me retornaría 80 resultados.

me tinca + usar la capacidad del motor SQL

Última edición por ArrauKano; 06/09/2005 a las 00:17
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 08:09.