2017-09-17 11 views
0

Je dois tables: villes et clientsComment combiner les résultats de plusieurs tables?

villes: cities_id, cities_name

  1. de New York
  2. Amsterdam
  3. Paris
  4. Milan
  5. etc.

Clients: colonnes avec des informations personnelles, mais les deux colonnes suivantes sont importen: plac_of_residence_id et place_of_birth_id. Ces deux colonnes contiennent la valeur différente des villes. Par exemple:

  1. client_id: 1
  2. client_name: John
  3. client_sex: m
  4. plac_of_residence_id: 3 (cities_id)
  5. place_of_birth_id: 1 (cities_id)

Comment Je reçois deux valeurs différentes des villes de table?

Mon instruction SQL est la suivante:

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"; 

Je reçois même citiesname pour plac_of_residence_id que pour place_of_birth_id au lieu de deux villes différentes

Comment puis-je obtenir en sortie: Paris et New York?

Répondre

2

Vous devez joindre deux villes fois

"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

Au lieu d'utiliser un ET dans votre déclaration, vous devez utiliser un OU:

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"; 

Ceci est parce que vous voulez avoir à la fois: la ville de naissance et la résidence actuelle. Avec votre exemple ci-dessus:

Pour John, l'exigence de jointure (votre partie "ON") devrait être vraie si la ligne courante dans la table des villes est non. 3 OU non. 1 parce que John est en relation avec les deux entrées.

0

J'ai essayé les deux options, mais le résultat est toujours le même:

Paris Paris ou New York New York

C'est mon code :

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; 
} 

Afficher le résultat:

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