2016-11-12 49 views
0

我试图使用PHP来搜索MySQL数据库中的IP和广告网络。基本上,我们会在各种广告网络之间轮换访问者,以防止同一访问者在24小时内被发送到同一网络。搜索并比较多个MySQL表

ip_addresses表

id, address, network_id 
1, 120.110.140.223, 1 
2, 120.110.140.223, 3 
3, 115.157.247.46, 1 

网络表

id, name, clicks, status, order 
1, Random Name, 200, Active, 1 
2, Example Name, 500, Inactive, 3 
3, Other Name, 100, Active, 2 

基本上,当访客点击我们的PHP页面,我需要能够从networks表呼应特定id。它应该是第一个网络的ID尚未在ip_addresses表中为访问者的IP地址列出。网络应按order列进行排序,并应具有status = Active

我想过使用PHP获取所有网络的id的名单与他们status设置为Active和正确排序是这样的:

SELECT id FROM networks WHERE status = 'Active' ORDER BY id ASC 

然后就是遍历,直到我到达第一id它不在IP地址的ip_addresses表中。但是,我不确定如何执行该循环,或者在找到不在ip_addresses表中的第一个network_id时如何停止该循环。

如果我需要澄清任何事情,请让我知道。谢谢!

+0

我会建议你做一个辅助表与用户和活跃的网络之间的关系,使用来自一个子查询NOT IN,删除关系活动时变为无效。这样,在该中间表中,您可以查找用户,并在网络被提取后删除,以继续下一个 –

回答

2

您可以通过将用户的IP

SELECT id 
FROM networks 
WHERE status = 'Active' 
    AND id NOT IN (
    SELECT network_id 
    FROM ip_addresses 
    WHERE address = '$ip' 
) 
ORDER BY id 
LIMIT 1;