Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/07/2011, 08:21
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta a dos tablas con... ¿COUNT? ufff!!

No sé si he entendido bien, pero creo que primero tendrías que averiguar cuantas veces ha visto el cliente las campañas que ha visto. Haces un cruce de ese resultado con todas las campañas, pero trayéndote todas las campañas mediante LEFT JOIN, comparas los datos y sólo muestras aquellos cuya frecuencia es 0, y también esos otros que tienen una frecuencia mayor que cero, pero menor que el número de veces vista por ese cliente. Luego ordenas al azar y seleccionas sólo uno. El azar con by rand() no es gran cosa, y podrían buscarse otras soluciones, pero...

SELECT ac.id, ac.nombre FROM ADS_CAMPS ac LEFT JOIN (SELECT ai.id_camp, COUNT (ai.id_camp) veces from ADS_IPS ai where ai.ip = $ip GROUP BY ai.ip)T1 ON ac.id = T1.id_camp WHERE ac.frecuencia = 0 OR (ac.frecuencia > 0 AND ac.frecuencia > T1.veces) ORDER BY RAND() LIMIT 1

Seguro que hay otras consultas. No he probado nada.