搜索&比较多个MySQL表

时间:2016-11-12 23:42:31

标签: mysql

我尝试使用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之后如何停止。

如果我需要澄清任何事情,请告诉我。谢谢!

1 个答案:

答案 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;