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

Consulta Con Varios WHERES desconocidos

Estas en el tema de Consulta Con Varios WHERES desconocidos en el foro de Mysql en Foros del Web. Bueno, aunque ya se bastante sobre PHP y Mysql, siempre hay cosas nuevas que aprender cuando te vas sometiendo mas y mas en proyectos nuevos. ...
  #1 (permalink)  
Antiguo 14/09/2012, 11:08
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Consulta Con Varios WHERES desconocidos

Bueno, aunque ya se bastante sobre PHP y Mysql, siempre hay cosas nuevas que aprender cuando te vas sometiendo mas y mas en proyectos nuevos.

El caso es que tengo una tabla donde se lista los amigos de un usuario, por lo cual la cantidad de amigos es desconocida, imaginemos que tengo la lista de los amigos en un array:

$amigos = ('a','b','c','d','f','g','h','i','j');

Ahora tengo otra tabla con la lista de las acciones y cosas que todos los usuarios han realizado en la web, pero lo que yo quiero es solo sacar las actividades nuevas de la lista que esta en $amigos.

En prinicipio podria hacer un bucle repitiendo las consultas con cada uno de los amigos que esta en el array, pero imaginemos que este usuario tiene mas de 100 amigos en su lista, no seria muy pesado realizar esta consulta?

Me preguntaba si hay manera de sacar estos datos en una sola consulta, es decir tener que evitar varias veces el OR en la sentencia sql ya que ademas no se sabe cuantas veces hay que poner el OR por la indiferencia de la cantidad de amigos; y asi tambien evita el bucle para sacar datos uno por uno.

mysql_query("SELECT acto FROM actividades Where id_user='$a[0]' OR id_user='$a[1]' OR id_user='$a[2]'....... OR id_user='$a[8]'");

Hay que tener en cuenta que las cantidad de amigos varia dependiendo del usuario y ademas tambien los valores de cada amigo.

saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 14/09/2012, 11:13
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: Consulta Con Varios WHERES desconocidos

Código MySQL:
Ver original
  1. SELECT acto
  2. FROM actividades
  3. WHERE id_user IN($a[0], $a[1], $a[2], $a[3], $a[4], $a[5], $a[6], $a[7], $a[8])

Obviamente, los valores deben ser incluidos programática y dinámicamente dentro del listado del IN().
__________________
¿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 14/09/2012, 11:32
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Respuesta: Consulta Con Varios WHERES desconocidos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. SELECT acto
  2. FROM actividades
  3. WHERE id_user IN($a[0], $a[1], $a[2], $a[3], $a[4], $a[5], $a[6], $a[7], $a[8])

Obviamente, los valores deben ser incluidos programática y dinámicamente dentro del listado del IN().
Muchas gracias de verdad, habia escuchado de ese termino (IN) en mysql, solo que no sabia su funcion xD.

Ahora no me queda claro esto, dentro de los parentesis de IN() tengo que poner la cantidad valores que quiero comparar, el caso es que la cantidad varia, entonces como puedo evitar tener que poner una cantidad fija de valores dentro del parentesis?
  #4 (permalink)  
Antiguo 14/09/2012, 11:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta Con Varios WHERES desconocidos

Usas una SUBQUERY con otro select de esos amigos, pero debes aclarar mejor la lógica. ¿Quieres sacar la lista de actos de quién o quiénes exactamente?
  #5 (permalink)  
Antiguo 14/09/2012, 11:38
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Respuesta: Consulta Con Varios WHERES desconocidos

quiero sacar la lista de actividades de una lista de amigos indefinidos y ademas de la cantidad de amigos desconocido.

estuve viendo:

Sera razonable primero crear una cadena con la cantidad de variables a consultar?

$amigo = $amigos[0];

foreach($amigos as $a){
$amigo .= $a;
}

Mysql_query("SELECT * FROM actividades WHERE id_user IN($amigo)");


que me dices?
  #6 (permalink)  
Antiguo 14/09/2012, 11:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta Con Varios WHERES desconocidos

Pero es que no nos dices cómo guardas la relación de amistad, si tienes una tabla del tipo
amigos
idamigo1, idamigo2
si se repite o no eso.
imagina que tú y yo somos amigos
jurena, fido-strike
fido-strike, jurena

porque eso cambiará la consulta de los amigos
sacar las actividades de los amigos de un usuario completo es fácil
Mysql_query("SELECT * FROM actividades WHERE id_user IN(SELECT idamigo1 FROM amigos UNION SELECT idamigo2 FROM amigos);

No he probado nada
  #7 (permalink)  
Antiguo 14/09/2012, 12:05
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: Consulta Con Varios WHERES desconocidos

Cita:
Ahora no me queda claro esto, dentro de los parentesis de IN() tengo que poner la cantidad valores que quiero comparar, el caso es que la cantidad varia, entonces como puedo evitar tener que poner una cantidad fija de valores dentro del parentesis?
¿Qué parte de esta frase no entiendes bien?:
Cita:
los valores deben ser incluidos programática y dinámicamente dentro del listado del IN().
La respuesta (usando lo que te dice @jurena) es simple:
- Si la lista proviene de de afuera de la base, usas programación en el lenguaje que utilices para crear la cadena con todos los valores que dispongas.
- Si proviene de una subconsulta, la pones en lugar de la lista...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 14/09/2012, 12:27
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 5 meses
Puntos: 26
Respuesta: Consulta Con Varios WHERES desconocidos

Jurena, me parece un codigo mas sencillo lo que me propones, hacer 2 consultas con solo 1, pero mis necesidades exigen 2 consultas, para la lista de amigos y para las actividades de cada amigo. Ademas de que en la tabla de amigos solo hay un campo "amigos" que es donde entra los nicks de cada amigo, antes esta el campo del id de usuario de quien es amigo el nick que esta en el campo amigos.

Y si, por cada pareja de amigos meto 2 filas en sus respectivos campos, y ademas hay otro campo con el cual se verifica si la amistad ha sido confirmada o no.

De todos modos ya lo he solucionado, pero muchas gracias a ambos, he usado la consulta con IN() y dentro de los parentesis he metido una variable en cadena (incluyendo comas y espacio obviamente), y esta cadena ya tiene la cantidad de amigos y los valores de cada amigos.

de verdad me ha sido de mucha ayuda, gracias y espero les sirva a otros.
  #9 (permalink)  
Antiguo 14/09/2012, 12:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta Con Varios WHERES desconocidos

Me alegro fido-strike, tu solución es la que te recomendaba gnzsoloyo: lanzas una consulta y luego incluyes la cadena de resultados en el IN.
Yo únicamente quería que vieras la otra posibilidad.

Etiquetas: php, select, sql, 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 11:01.