Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/09/2013, 14:52
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta según id especifico o todos

Hola edos_gn:

No me quedó claro cuál es el problema, pero veo varios detalles en tu consulta:

1. la palabra O no forma parte del estándar de SQL, el operados es OR,

2. el punto y coma (;) indica la terminación de una sentencia, por lo tanto, la parte de la condición

Código:
AND p.sexo_id=s.sexo_id
que aparece después del punto y coma no forma parte del SELECT.

3. No hagas las uniones entre tablas en el FROM-WHERE, utilizas JOIN's:

En lugar de hacer esto:

Código:
SELECT * FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
Haz esto

Código:
SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
Ahora bien, como dije al principio, no me queda claro qué es lo que quieres hacer, pero me suena a que en un formulario "pintas" los valores por los que quieres filtrar la información, por lo tanto, tienes un filtro para GENERO con tres valores (F, M, TODOS) y lo que quieres hacer es que si selecciona la opción de TODOS, entonces mostrar tanto los registros con F como los registros con M... si estoy en lo correcto entonces tenemos un problema.

Este tipo de consultas lo hemos tratado infinidad de veces en este foro , creo que no te tomaste unos minutos para buscar algo que te pudiera servir, ojo con eso para la próxima.

En MySQL no existen las condiciones opcionales, por lo que lo que quieres hacer no se resuelve con una consulta, sino de manera programática, es decir, mediante un SP o si estás programando con algún lenguaje, pues con este lenguaje...

El querer incluir una opción de TODOS, equivale a NO COLOCAR NINGUNA CONDICIÓN, si tu campo de GENERO tiene sólo dos valores (F,M) es lo mismo que hagas esto:

Código MySQL:
Ver original
  1. SELECT * FROM tu_tabla WHERE genero in ('F', 'M');

O que no pongas ninguna condición:

Código MySQL:
Ver original
  1. SELECT * FROM tu_tabla;

La opción es construir de manera "dinámica" tu consulta, a partir de los valores seleccionados para tus filtros, en pseudocódigo sería más o menos así:

Código:
consulta = "SELECT * FROM tu_tabla WHERE"

SI filtro_genero es distinto de "TODOS" ENTONCES
   consulta = consulta + "sexo = " + filtro_genero + " AND "

SI filtro_estado es distinto de "TODOS" ENTONCES
   consulta = consulta + "estado = " + filtro_estado + " AND "
.......
es decir, vas concatenando SÓLO LOS FILTROS QUE REALMENTE TENGAN UN VALOR PARA FILTRAR. Debes tener cuidado con el uso de los AND's, para que no te vaya a faltar o sobrar alguno.

Si lo vas a hacer con SP, dale un vistazo a las SENTENCIAS PREPARADAS

Si esto no es lo que quieres hacer, entonces explicanos con algunos datos de ejemplo qué es lo que tienes en tus tablas y qué es lo que esperas como salida.

Saludos
Leo