Cita:
Iniciado por emanuelarcos Entiendo, perfecto.
Hice lo que me decís, pero solo logro que me devuelva los paquetes que están despublicados. y yo lo que necesito es que me muestre todos los paquetes y si esta publicado o no.
Estoy haciendo la consulta con éste sql:
Código SQL:
Ver originalSELECT u.id, u.nombre, p.package_name,st.STATUS
FROM (users u, packages p) LEFT JOIN banned_packages st
ON st.user_id = u.id
WHERE
p.id = st.package_id
Agradezco mucho tu ayuda!
Me ha costado varias horas encontrar la solución a este problema porque estoy muy verde en cuanto a BD. No soy profesional como lo pueda ser otro usuario del foro que se dedica profesionalmente a ello y uno en especial al que admiro por sus conocimientos sobre este asunto.
De paso decirte que este es el foro de PHP y no de MYSQL, así que lo acertado hubiera sido hacer una pregunta específica en ese foro después de haber analizado detenidamente cual es tu problema con el sistema que estás creando.
Si bien entendí, lo que deseas es obtener una lista de todos los paquetes y además solo mostrarle al gestor los paquetes que están baneados y para quien está baneado.
Bueno, pues eso se puede hacer de dos maneras:
Manera 1)
Código MySQL:
Ver original
P.idpackages,
P.package,
BP.idbanned_packages,
BP.idpackages,
BP.idusers
banned_packages BP
BP.idpackages = P.idpackages
Manera 2)
Código MySQL:
Ver original
P.idpackages,
P.package,
BP.idbanned_packages,
BP.idpackages,
BP.idusers
banned_packages BP
BP.idpackages
= P.idpackages
and BP.idusers
!=2
¿Cual es la diferencia entre la 1 y la 2?
Pues en la cantidad de resultados duplicados que devuelve.
La manera 1 devuelve todos los paquetes, pero además todos los usuarios baneados de cada paquete, lo que hace que un paquete se repita dos, tres, cuatro, X nº de veces necesarias para mostrar cada usuario baneado de cada paquete.
La manera 2 devuelve todos los paquetes, pero solamente muestra el usuario en la tabla banned_packages especificado en el ON del LEFT JOIN, evitando duplicar paquetes, dando la posibilidad de poder hacer limit (para por ejemplo paginación de resultados con PHP) y acorta la longitud del resultado. Es ideal para filtrar una búsqueda de paquetes baneados por usuario. Aunque más ideal sería solamente mostrar los paquetes en los que el usuario está baneado, sin mostrar el resto de los paquetes.
Ahora solamente te queda elegir qué manera te sirve más para tu finalidad, cambiar los alias y nombres de tablas por las tuyas y además en la manera 2 hacer dinámica la igualdad de BP.idusers != $id_del_usuario
Luego solamente tienes que detectar en PHP que donde no sea NULL no lo muestre o muestre, según quieras.
Y recuerda, siempre utiliza alias para los nombres de las tablas, creeme que ayuda a entender un código SQL.