2017-09-17 27 views
0

私がテーブルに持っている:都市とクライアント複数のテーブルの結果を結合するにはどうすればよいですか?

都市:などcities_id、cities_name

  1. ニューヨーク
  2. アムステルダム
  3. パリ
  4. ミラノ

クライアント: 列には個人情報が含まれていますが、plac_of_residence_idとplace_of_birth_idの2つの列がインポートされます。これら2つの列には、都市とは異なる値が含まれています。たとえば、次のように

  1. のclient_id:1
  2. クライアント名:ジョン
  3. client_sex:メートル
  4. plac_of_residence_id:3(cities_id)
  5. place_of_birth_id:1(cities_id)

どのように行います私はテーブルの都市から2つの異なる値を得ますか?次のように

私のSQL文は次のとおりです。

SELECT * FROM clients C LEFT JOIN cities C ON C.plac_of_residence_id = C.cities_id AND place_of_birth_id = C.cities_id WHERE C.client_id = $client_id"; 

私はplace_of_birth_id用としてplac_of_residence_idに同じcitiesnameを得る代わりに、二つの異なる都市の

がどのように私は出力として得ることができます:パリ、ニューヨーク?誕生の街と現在の居住地:

答えて

2

あなたが都市を2回

"SELECT C.*, a.*, b.* FROM clients C 
LEFT JOIN cities a ON C.plac_of_residence_id = a.cities_id 
LEFT JOIN cities b on c.place_of_birth_id = b.cities_id 
WHERE C.client_id = $client_id"; 
0

代わりにあなたの文でANDを使用してのあなたはORを使用する必要があります:あなたは両方を持っているしたいので

SELECT * FROM clients C LEFT JOIN cities C ON C.plac_of_residence_id = C.cities_id OR place_of_birth_id = C.cities_id WHERE C.client_id = $client_id"; 

です。上記の例では、

都市の現在の行が「いいえ」の場合、参加要件(「ON」部分)は真と評価されます。 3またはいいえ。 1はJohnが両方のエントリとの関係にあるためです。

0

に参加する必要があり、私は両方のオプションを試してみたが、結果はまだ同じです:

パリやニューヨーク、ニューヨーク

これは私のコードです:

function fetch_clients($clients_id){ 
    $query = "SELECT * FROM clients C LEFT JOIN cities A ON C.place_of_residence_id = A.cities_id WHERE C.clients_id = $clients_id"; 
    $res = $this->runQuery($query); 
    $res->execute(); 
    $result = $res->fetchAll(PDO::FETCH_ASSOC); 
    return $result; 
} 

表示結果:

foreach ($gebruiker_data->fetch_clients($client_id) as $aRow): 

    print '<tr class=""> 
     <td><button type="button" class="btn btn-danger" id="btnDel"><i class="fa fa-trash"></i></button></td> 
     <td><button type="button" class="btn btn-default" id="btnEdit"><i class="fa fa-pencil"></i></button></td> 
     <td>'.$aRow["client_name"].'</td> 
     <td>'.$aRow["client_plac_of_residence_id"].'</td> 
     <td>'.$aRow["client_place_of_birth_id"].'</td> 
    </tr>'; 
endforeach 
関連する問題