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

me ayudan con una consulta que involucra un INNER JOIN?

Estas en el tema de me ayudan con una consulta que involucra un INNER JOIN? en el foro de Bases de Datos General en Foros del Web. Buenas tengo dos tablas: usuarios ID_usuario ID_pais genero interesado ID_interes ID_usuarios_interes y quiero hacer lo siguiente: encontrar todos los usuarios que sean hombres y vivan ...
  #1 (permalink)  
Antiguo 16/05/2008, 15:04
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años, 7 meses
Puntos: 24
me ayudan con una consulta que involucra un INNER JOIN?

Buenas tengo dos tablas:

usuarios

ID_usuario
ID_pais
genero


interesado
ID_interes
ID_usuarios_interes

y quiero hacer lo siguiente:
encontrar todos los usuarios que sean hombres y vivan en el pais 46 y que además tengan entre sus intereses ( en la tablaa interesado ) los ID: 3, 4 y 5


he hecho esto:
Código PHP:
SELECT biografia_en,DATE_FORMAT(usuarios.ultimo_ingreso,'%d/%m/%Y') as fecha_ultimo_ingreso,DATE_FORMAT(usuarios.fecha_registro,'%d/%m/%Y') as fecha_entro,usuarios.foto,usuarios.fecha_nacimiento,usuarios.ID_usuariousuarios.usuariousuarios.nombreusuarios.generousuarios.ID_pais,usuarios.ID_region from interesado INNER JOIN usuarios ON interesado.ID_usuario_interes=usuarios.ID_usuario WHERE usuarios.ID_pais=46 AND usuarios.genero=AND (interesado.ID_interes=AND interesado.ID_interes=and interesado.ID_interes=5order by interesado.ID_usuario_interes 
sin embargo no obtengo ningun resultado por que? si en en las tablas ay el siguiente registro


usuarios

ID_usuario | genero | ID_pais

1 | 1 | 46

ineresado

ID_usuario_interes | ID_interes
1 | 3
1 | 4
1 | 5


como veran si hay un cliente que cumple con todas las condiciones, es decir tiene como interes 3 y 4 y 5 y ademáses hombre y vivie en el pais con ID 46

por que entonces arroja un resultado erroneo?

se los agradezco mucho.
__________________
SEO en Medellin

Última edición por mafima; 16/05/2008 a las 15:29
  #2 (permalink)  
Antiguo 17/05/2008, 00:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: me ayudan con una consulta que involucra un INNER JOIN?

No encuentra nada porque ningún registro cumple con la condición que exiges, que su ID_interes sea a la vez 3, 4, 5: eso es lo que le estás pidiendo con tu consulta.
Para lo que quieres, tendrás que hacer una subconsulta parecida a esta, que te trae todos los datos de usuarios del usuario o usuarios que cumplen esas condiciones.
Código:
SELECT * from usuarios where ID_usuario IN (SELECT u.ID_usuario FROM usuarios u INNER JOIN interesado i ON u.ID_usuario = i.ID_usuario_interes WHERE u.ID_pais = 46 AND u.genero = 1 AND ID_usuario IN (select i.ID_usuario_interes from interesado i where i.ID_interes = 3) And ID_usuario IN (select i.ID_usuario_interes from interesado i where i.ID_interes = 4) and ID_usuario IN (select i.ID_usuario_interes from interesado i where i.ID_interes = 5))
  #3 (permalink)  
Antiguo 17/05/2008, 10:14
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años, 7 meses
Puntos: 24
Respuesta: me ayudan con una consulta que involucra un INNER JOIN?

Gracias jurena,
veras la subconsulta si me trae los resultados que quiero, pero entiendo yo que la subconsta es una forma poco óptima de hacer querys a la base de datos, mi pregunta es:
conoces/en otra forma de obtener los mismos resultados sin usar una subconsulta.

Básicamente lo que quiero es sacar todos los datos de los usuarios que tengan interes en:
inversion [ID=3]
y
finanzas [ID=4]
y
economia[ID=5]

es decir usar el concatenador Y y luego la misma consulta con la concatenacion O, es decir:

inversion [ID=3]
ó
finanzas [ID=4]
ó
economia[ID=5]

esta última ya la he logrado pero me toca hacer uso de un group by y pues creo que tampoco es muy optimo esto.


El asunto es que yo debo hacer las consultas lo más optimas y rapidas posibles puesto con esta misma base ya he tenido infinidad de problemas con el rendimiento del servidor, y lo que estoy haciendo en este momento es mejorar la estructura y las consultas.

muchas gracias
__________________
SEO en Medellin
  #4 (permalink)  
Antiguo 17/05/2008, 14:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: me ayudan con una consulta que involucra un INNER JOIN?

Esta también lo encontraría, pero, la verdad, no tengo conocimientos para evaluar los rendimientos de las consultas. Me limito a aplicarles explain y medir el tiempo.
Hago una cuenta agrupando por usuarios Id, pero contando los distintos. Luego busco la opción de los 3 ...
No tiene subconsulta, pero sí agrupa...

SELECT id_usuario, COUNT (DISTINCT interesado.ID_interes) AS total FROM usuarios INNER JOIN interesado ON interesado.ID_usuario_interes = usuarios.Id_usuario WHERE usuarios.genero = 1 and usuarios.ID_pais = 46 AND interesado.Id_interes IN (3, 4, 5) GROUP BY usuarios.ID_usuario HAVING total = 3
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 23:13.