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

Duda con una consulta

Estas en el tema de Duda con una consulta en el foro de Bases de Datos General en Foros del Web. Hola a tod@s. Tengo que hacer una consulta a la BD y no sé como se puede hacer, si es que se puede. Supongamos que ...
  #1 (permalink)  
Antiguo 28/02/2010, 10:10
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 3 meses
Puntos: 58
Duda con una consulta

Hola a tod@s.

Tengo que hacer una consulta a la BD y no sé como se puede hacer, si es que se puede.

Supongamos que tengo una tabla de usuarios con sus datos personales. Ahora quiero seleccionar los datos personales de varios de ellos, dependiendo de los idUsuario que me pasen. La cuestión es que el número de usuarios que me pasan puede variar. La cosa sería poder hacer algo así:

SELECT * FROM usuarios WHERE idUsuario='1' OR idUsuario='4' OR idUsuario='6'

pero pudiendo variar cada vez la cantidad de usuarios que tengo que seleccionar.
¿Se podría hacer con una consulta solamente?.

Gracias. Un saludo.
  #2 (permalink)  
Antiguo 28/02/2010, 12:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda con una consulta

En principio, se podría, pero para ver cómo habría que ver de qué DBMS estamos hablando, por cuanto la sintaxis cambia completamente de uno a otro.
¿Qué DBMS estás usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 01/03/2010, 05:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 3 meses
Puntos: 58
Respuesta: Duda con una consulta

Hola gnzsoloyo.

Sí, se me olvidó ponerlo. Es MySQL.
A ver como podría ser porque por más vueltas que le doy no lo saco.
  #4 (permalink)  
Antiguo 01/03/2010, 06:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda con una consulta

Si la sentencia la creas en una aplicación, la mejor solución es usar la forma
Código MySQL:
Ver original
  1. FROM usuarios
  2. WHERE idUsuario IN(valores)
Donde valores es una lista de valores separados por comas, tomados dinamicamente por la aplicación, como por ejemplo:
Código MySQL:
Ver original
  1. FROM usuarios
  2. WHERE idUsuario IN(1, 3, 55, 69, 68, 69, 70, 201)
La otra forma es crear esta sentencia por medio de una sentencia preparada, que se puede administrar por medio de un stored procedure. La sintaxis es un poco más compleja, pero es eficiente.

Una tercera forma de encarar esto es cuando la lista de ID a buscar provienene de otra consulta. En ese caso lo mejor es usar una subconsulta que recoja los valores a buscar:
Código MySQL:
Ver original
  1. FROM usuarios
  2. WHERE idUsuario IN(SELECT DISTINCT idUsuario FROM tabla WHERE condiciones)
Donde condiciones son las condiciones buscadas de los ID.
Es importante en este caso recordar que el SELECT de la subconsulta debe devolver una única columna, porque se está comparando con un único campo, y comparar con un set generaría error.

Hay más formas pero depende de la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 01/03/2010 a las 09:28
  #5 (permalink)  
Antiguo 01/03/2010, 09:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 3 meses
Puntos: 58
Respuesta: Duda con una consulta

Gracias por la respuesta, gnzsoloyo.

La primera forma es la que había visto yo, pero la cosa es que no sabía como meter los valores dinámicamente dentro del IN usando PHP. (Según voy escribiendo esto se me está ocurriendo como puede ser, XD)

La segundo forma ya supuse que era la mejor, pero la verdad es que no estoy puesto en procedimientos y voy pillado de tiempo para ponerme a mirar sobre ello, aunque lo mismo es muy fácil.

La tercera forma creo que no puede ser porque los id no los obtengo de una consulta previa sino que me llegan con un formulario, y los que me llegan pueden variar cada vez , con lo que tendría el mismo problema con el SELECT que en la forma primera.

Supongo que se podrá hacer de la forma 1, concatenando la sentencia con un bucle for en PHP, que no se me había ocurrido antes.

Gracias por tu tiempo, gnzsoloyo.

Un saludo.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:01.