2016-11-12 11 views
0

PHPを使用してMySQLデータベースのIPと広告ネットワークを検索しようとしています。基本的には、24時間以内に同じ訪問者が同じネットワークに送られないように、さまざまな広告ネットワーク間で訪問者をローテーションします。訪問者は私たちのPHPページに当たったとき複数の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 

は基本的に、私はnetworksテーブルから特定のidをエコーすることができるようにする必要があります。 のIDは、訪問者のIPアドレスのip_addressesテーブルにまだリストされていません。ネットワークはorder列で注文し、status = Activeにする必要があります。

私はActiveに自分statusセットを持つすべてのネットワークのid年代のリストを取得するためにPHPを使用する方法について考え、正しくこのように命じた:私は最初に到達するまで通じ

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; 
関連する問題