2017-07-21 18 views
-3

私はこれを持っています: 私はコンタクトがあり、各コンタクトは会社にリンクしていて、会社は別のテーブルにあります。 私はいくつかのデータと連絡先にリンクされている情報のリストを持っている場所でINFORMSテーブルを持っています。 私は、情報リストをフィルタリングするSQLを作成する必要がありますが、特定のCOMPANYの情報のみを表示するので、同じ会社を持つすべての連絡先を検索し、その会社のINFORMSを表示する必要があります。 アイデアPHP MYSQL他の検索の中に特定のフィールドがある検索ユーザー

UPDATE:

テーブルCOMPANY:

  • ID:02名前:Googleの

表のCONTACT:

  • ID:01名前:ジョン・カンパニー:02 - Googleとリンクしています

表はINFORMS:

  • ID:01データ:一部のデータ連絡先:01 - だから、ジョンにリンクされている
  • ID:02データ:一部のデータ連絡先:01 -
  • ジョン
  • にリンクされているもう1 ID:03データ:一部のデータ連絡先:02 - ジョンにリンクされていない

私はSHOWMEのみ応答要求がGoogleにリンクされた検索クエリを作成する必要があるので、会社としてGoogleを持っている連絡先にリンクされているすべて通知します。 SO 01通知し、02 I`mこのような何かをしようとしているが、いけない仕事:

$sql = "SELECT * FROM polar_companies WHERE id IN (SELECT * FROM polar_contacts WHERE Empresa = '$v_empresa');" 
HERE I DONT KNOW HOT TO PERFORM A INFORM SEARCH 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
while ($row = $result->fetch_assoc()) { 
echo HERE I NEED THE INFORMS 
} 
} else { 
    echo "<p>No informs</p>"; 
} 
+0

私はあなたのデータを見ることができないので、とても良いアイデアはありません。しばらく時間をとってここにいくつかのサンプルデータを表示してください。スタックオーバーフローは、フリーコード作成サービスではありません。 –

+0

質問は表示されますがコードは表示されません。それはあなたが自分で努力していないことを示しています。このコードで私を助けてくださいが、コードはありません。いいえthx –

+0

あなたからのコード、私からのコードはありませんhehe少なくともデータ構造を表示してください...そして、それにショットを与え、ブロックする場所を教えてください。それは答えに値する種類の質問です –

答えて

0

は、TIMが、実行時の問題点を述べたようにもこの質問が有用である可能性がある。この

$sql = "SELECT * FROM polar_company WHERE `name`='$name'"; 

$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
    $n = 1; 
    $row = $result->fetch_assoc(MYSQLI_ASSOC); 
    $company_id = $row['id']; 
    $query = "SELECT * FROM polor_contact WHERE `company`='$company_id'"; 
    $contact_result = $conn->query($query); 
    while ($contact_row = $contact_result->fetch_array(MYSQLI_ASSOC)) { 
     $contact_id = $contact_row['id']; 
     $query = "SELECT * FROM `polor_informs` WHERE `contact_id`='$contact_id'"; 
     $informs_result = $conn->query($query); 

     while ($informs_row = $informs_result->fetch_array(MYSQLI_ASSOC)) 
     { 
      $informs[$n] = $informs_row; 
      $n++; 
     } 
    } 
} 
print_r($informs); 
} else { 
    echo "<p>No informs</p>"; 
} 

ような何かを行うことができますし、 1つのクエリ{INNER LEFT JOIN}を使用することをお勧めします。 select left join table use and condition

+0

はい、あなたはこのようなことをすることができます。しかし、リストが非常に大きい場合は、データセットが増えるにつれて実行時間が指数関数的に増加します。ところで、適切なインデントは本当に答えの可読性に役立ちます。また、クエリに入れている変数がデータベースから来ていても、準備された文を常に使用する方が良い方法です。 –

+0

リクエストに応じて編集 – Solor

+0

もっと読む –

0

まず、テーブルをリンクするクエリが必要です。このテーブルのスキーマを考える

$sql = "SELECT informs.* " . 
     "FROM companies, contacts, informs " . 
     "WHERE companies.company_id=contacts.company_id AND " . 
     "  contacts.contact_id=informs.contact_id AND " . 
     "  companies.company_id=?"; 

スキーマを引き出すそんなに簡単にクエリを形成することになる:

Companies   Contacts   Informs 
---------   --------   ------- 
company_id --+ contact_id --+ inform_id 
name   | name   | some_data 
      +-- company_id +-- contact_id 

はそうのようなクエリが作成します。各テーブルがどのように接続されているかを確認してください。

SQLインジェクションが悪いので、use prepared statementsです。クエリで '$ some_variable'を使ってクエリを実行しないでください。

// assuming you have already made connection 
// assuming you assign $company_id 

$result = $db->prepare($sql); 
$result->execute(array($company_id)); 

$rows = $result->fetchAll(); 

アドバイスの単語は、さまざまなクエリを試すためにphpMyAdminなどのツールを使用してください。クエリをうまくやっていれば、複数のクエリを繰り返すことはありません(テーブルが大きくなるにつれてひどく非効率です)。

関連する問題