Problema con filtrado incorrecto en consulta de base de datos

  • Autor Autor pa3lo022
  • Fecha de inicio Fecha de inicio
P

pa3lo022

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas tardes, me podrían ayudar con una query que me esta volviendo loco

Les paso una imagen de la base de datos con sus relaciones
Captura de pantalla de 2016-12-06 18-01-38.webp

y la query que intento hacer es

select *
from items i, users u, localidades l, provincias p, fotos f
where i.IdUser = u.IdUser
and p.id = u.IdProvincia
and l.id_privincia = p.id
and f.IdItem = i.IdItem
and i.IdCategoria = '$_REQUEST[idCat]'
group by u.IdUser

El problema que tengo es que si en esta query pongo el id de la provincia 2, me sigue trayendo un registro, cuando no debería traer nada por que el usuario que publico el item es de la provincia 14 y la localidad 1442 y esto no me lo respeta nunca

Me podrían ayudar por favor?

muchas gracias
 
A mi humilde parecer lo mejor sería que utilizaras junturas naturales (JOIN) en lugar de lo que estas haciendo actualmente.
 
Utiliza INNER JOIN para unir tablas que esten relacionadas..
 
Muchas gracias muchachos

Enviado desde mi Nexus 5X mediante Tapatalk

- - - Actualizado - - -

Gracias andres pero la verdad me gustaria hacer las query a mi, igualmente muchas gracias.

Les hago otra pregunta, porque si funcionaria un join y no funciona como la estoy haciendo yo?

muchas gracias de nuevo
 
Parece que:

- estas triangulando idprovincia en p, u y l ;
- como está planteado la tabla items no es una tabla catálogo sino de transacciones.

Saludos
 
tienes que untilizar INNER JOIN

items as i, users as u, localidades as l, provincias as p, fotos as f
 
El inner join se inventó porque se requería hacer consultas entre varias tablas relacionadas. Si se pudiera hacer como tu quieres el INNER JOIN no tendría razón de existir. De hecho hasta existen los LEFT JOIN, RIGHT JOIN y no recuerdo que más
 
Hola

Te recomiendo que simplifiques un poco el problema para ver realmente donde se encuentra el fallo. Quita de momento el group by y trabaja directamente sobre selects. Primero une users con provincia y mira que te sale. Tras esto ves añadiendo el resto de condiciones de la clausula where. Si vas añadiendo tablas y quitas el group by.. seguramente te darás cuenta de que dato de que tabla es el que está mal.

El utilizar join o directamente una condición dentro del where es cuestión de gustos, y a veces de ver más claro como optimizar una consulta.

Si que es cierto que utilizar left join o righ join, tienen un uso diferente. Aquí más info cuando utilizarlo.
https://dev.mysql.com/doc/refman/5.7/en/left-join-optimization.html
 
Última edición:
Atrás
Arriba