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

[SOLUCIONADO] Filtrar resultados con JOIN

Estas en el tema de Filtrar resultados con JOIN en el foro de Mysql en Foros del Web. Bueno, MySql no es mi fuerte, hasta ahora hacia consultas mas o menos sencillas, pero ahora no puedo encontrarle la vuelta a lo siguiente. Primero ...
  #1 (permalink)  
Antiguo 17/12/2010, 01:41
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Filtrar resultados con JOIN

Bueno, MySql no es mi fuerte, hasta ahora hacia consultas mas o menos sencillas, pero ahora no puedo encontrarle la vuelta a lo siguiente.

Primero les hago un resumen de como trabaja mi aplicación
Por un lado tengo una tabla "usuarios" a traves de la cual se hace login (el valor del campo 'usuario' de guarda en una variable de sesion)

En segundo lugar tengo una tabla "publicidades", en esta cada registro representa una publicidad que conlleva una acción determinada, (bien puden comprar un producto o registrarse en un servicio)

Mientras no se inició sesion, se ven todas las publicidades, hasta ahi no hay problemas.

algunas de estas publicidades pueden ser ejecutadas "tan solo una vez x cada usuario", es decir que si fue accionada, no debe de mostrada en la lista de publicidades nuevamente para el usuario que la accionó, obviamnete en tanto este haya iniciado la sesion.

mi tabla de publicidades tiene como indice primario el campo 'id_publi" que es un numero.

A partir de aquí, hice lo siguiente:
Creé una nueva tabla, llamada transacciones, en la cual, si el usuario logueado acciona una publicidad de las que sólo puede ejecutar una vez se van insertando filas con los siguientes valores

id_trans (este es el indice de la tabla)
id_publi_trans (en este campo inserto el 'id_publi' de la tablas publicidades)
usuario_trans (en este el valor del usuario actualmente logueado)

Un ejemplo concreto
en publicidaes tengo 3 registros con sus id_publi 1,2,3

no hay usuarios logueados y muestro

Publicidad 1
Publicidad 2
Publicidad 3

me logueo como "juan" (un 'usuario' de la tabla 'usuarios', una obviedad)

'juan' hace clcik en la publicidad uno (1), con lo que se inserta (antes de redirigirlo a los detalles de la publicidad) en la tabla transaciones

id_trans 1
id_publi_trans 1 (que recuerden, es el valor id_publi de la tabla publicidades)
usuario_trans 'juan'




Mi idea entonces fue hacer un JOIN entre la tabla 'publicidades' y la tabla 'transacciones'

empecé con esto

$consulta = "
SELECT * FROM publicidades JOIN transacciones
ON publicidades.id_publi != transacciones.id_publi_trans
WHERE transacciones.usuario_trans = '$usuario'
";

$usuario es 'juan'

y, fantastico, al refrescar la lista de publicidades, solo eran visibles la 2 y la 3. Pero ya me suponia yo que no era tan facil. Porque:

A. Si me logueo como 'Pedro', no veo publicidad alguna (0 resultados a la consulta)
B. Si la tabla transacciones, aún esta vacia, tampoco tengo resultados

Estuve viendo algunos tutoriales sobre JOIN, pero me perdí más todavia, es mas, no se si es correcto que lo use. Probe con muy diversas variantes de JOIN pero no pude resolverlo, así que espero alguna sugerencia o idea.

Si necesitan alguna info adicional, se las paso

Gracias
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #2 (permalink)  
Antiguo 17/12/2010, 03:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Filtrar resultados con JOIN

Código MySQL:
Ver original
  1. SELECT * FROM publicidades
  2. WHERE publicidades.id_publi
  3.                  NOT IN (SELECT transacciones.id_publi_trans
  4.                                FROM transacciones
  5.                                WHERE transacciones.usuario_trans = '$usuario');


Así creo que te funcionará.

Que hago:

Pido todas las publicidades que no esten en la lista de publicidades que ha accionado el usuario XXX.

Una mejora que podrias introducir es usar el id del usuario no su nombre.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 17/12/2010, 12:15
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Filtrar resultados con JOIN

quimfv:

Por lo visto, no hay mejor solución que la "Solución Universal", preguntar a los que saben.
Prometo que voy a desempolvar mis apuntes de MySql.

Mil gracias


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: filtrar, join, resultados
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 06:08.