Ver Mensaje Individual
  #7 (permalink)  
Antiguo 21/06/2014, 07:16
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Despublicar paquete para un usuario en particular.

Cita:
Iniciado por emanuelarcos Ver Mensaje
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 original
  1. SELECT u.id, u.nombre, p.package_name,st.STATUS
  2.                             FROM (users u, packages p) LEFT JOIN banned_packages st
  3.                             ON st.user_id = u.id
  4.                             WHERE
  5.                             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
  1. use pruebas;
  2.  
  3.         P.idpackages,
  4.         P.package,
  5.         BP.idbanned_packages,
  6.         BP.idpackages,
  7.         BP.idusers
  8. FROM packages P
  9.  
  10.     banned_packages BP
  11.     BP.idpackages = P.idpackages
  12. ORDER BY P.idpackages

Manera 2)

Código MySQL:
Ver original
  1. use pruebas;
  2.  
  3.         P.idpackages,
  4.         P.package,
  5.         BP.idbanned_packages,
  6.         BP.idpackages,
  7.         BP.idusers
  8. FROM packages P
  9.  
  10.     banned_packages BP
  11.     BP.idpackages = P.idpackages and BP.idusers !=2
  12. ORDER BY P.idpackages

¿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.
__________________
Ayúdame a hacerlo por mi mismo.

Última edición por guardarmicorreo; 21/06/2014 a las 07:24