我尝试使用PHP在MySQL数据库中搜索IP和广告网络。基本上,我们在各种广告网络之间轮换访问者,以防止同一访问者在24小时内被发送到同一网络。
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页面时,我需要能够回显id
表中的特定networks
。对于访问者的IP地址,ip_addresses
表中已经列出第一个网络的ID 。网络应按order
列排序,并且应为status = Active
。
我考虑过使用PHP获取所有网络的id
列表,其status
设置为Active
并正确排序如下:
SELECT id FROM networks WHERE status = 'Active' ORDER BY id ASC
然后循环直到我到达id
表中没有IP的第一个ip_addresses
。但是,我无法确定如何执行该循环,或者在找到network_id
表中的第一个ip_addresses
之后如何停止。
如果我需要澄清任何事情,请告诉我。谢谢!
答案 0 :(得分:2)
您可以通过传递用户的IP
从子查询中使用NOT IN
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;