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

Consulta según id especifico o todos

Estas en el tema de Consulta según id especifico o todos en el foro de Mysql en Foros del Web. Buena tarde, necesito ayuda con una consulta la idea es que tengo tres tablas. 1. Persona 2. Sexo 2. Estado La tabla persona hereda la ...
  #1 (permalink)  
Antiguo 03/09/2013, 14:03
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 0
Consulta según id especifico o todos

Buena tarde, necesito ayuda con una consulta la idea es que tengo tres tablas.

1. Persona
2. Sexo
2. Estado

La tabla persona hereda la como llave foránea los id de las tablas Sexo y Estado.

Pero al momento de realizar un reporte quiero que puedan elegir el filtro entre el Genero (F,M) que esta en la tabla o la opción todos.
Estado (I,A) que estan en la tabla o la opción todos.

Como hago para que la consulta me retorne los datos según el id seleccionado o todos.

Código:
SELECT p.persona_primer_nombre FROM persona p, estado e, sexo s
WHERE (p.sexo_id="id seleccionado" o p.sexo_id="todos");
AND p.sexo_id=s.sexo_id
  #2 (permalink)  
Antiguo 03/09/2013, 14:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Consulta según id especifico o todos

edos_gn,
pide ayuda en el foro de programación, según el programa que uses. Piensa que cuando pones todos los sexos, en realidad lo que haces es no filtrar por ninguno, e igual ocurre con estado. La cadena de consulta dependerá de los valores enviados desde el formulario. Si no se envía valor referente al sexo o se envía todos, que es lo mismo en este caso, no añadas el filtrado p.sexo = lo que sea. Esta es una pregunta muy frecuente y relativamente fácil de solucionar, pero no podemos darte la solución en este foro, ya que no nos corresponde a nosotros, sino a los amigos del foro de programación.

Escribe y verás cómo te lo resuelven en minutos, segundos.
  #3 (permalink)  
Antiguo 03/09/2013, 14:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 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
  #4 (permalink)  
Antiguo 04/09/2013, 09:21
 
Fecha de Ingreso: abril-2012
Ubicación: Colombia
Mensajes: 10
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Consulta según id especifico o todos

Gracias Leo, exactamente la ultima parte era lo que necesitaba

Cita:
La opción es construir de manera "dinámica" tu consulta, a partir de los valores seleccionados para tus filtros
Pensé que podía encontrar algún respuesta directamente desde el mysql para implementarla dentro del procedimiento almacenado que estoy creando.

Igualmente tu aporte me da muchas luces para solucionar mi problema.
  #5 (permalink)  
Antiguo 04/09/2013, 10:08
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Consulta según id especifico o todos

Dale un vistazo a la liga que te puse, acerca de SENTENCIAS PREPARADAS... eso es lo que necesitas para hacerlo desde tu SP.

Saludos
Leo.

Etiquetas: especifico, según, select, 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 10:28.