Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何组合来自多个表的结果?_Php_Mysql_Sql_Sqlite_Pdo - Fatal编程技术网

Php 如何组合来自多个表的结果?

Php 如何组合来自多个表的结果?,php,mysql,sql,sqlite,pdo,Php,Mysql,Sql,Sqlite,Pdo,我得去看几张桌子:城市和客户 城市:城市编号、城市名称 纽约 阿姆斯特丹 巴黎 米兰 等等 客户: 包含个人信息的列,但以下两列很重要:plac_of_residence_id和place_of_Borth_id。这两列包含与城市不同的值。例如: 客户识别码:1 客户名称:约翰 客户性别:m 居住地点编号:3(城市编号) 出生地id:1(城市id) 如何从表城市中获取两个不同的值 我的sql语句如下: SELECT * FROM clients C LEFT JOIN cities C ON C

我得去看几张桌子:城市和客户

城市:城市编号、城市名称

  • 纽约
  • 阿姆斯特丹
  • 巴黎
  • 米兰
  • 等等
  • 客户: 包含个人信息的列,但以下两列很重要:plac_of_residence_id和place_of_Borth_id。这两列包含与城市不同的值。例如:

  • 客户识别码:1
  • 客户名称:约翰
  • 客户性别:m
  • 居住地点编号:3(城市编号)
  • 出生地id:1(城市id)
  • 如何从表城市中获取两个不同的值

    我的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";
    
    我得到的城市名称与居住地和出生地相同,而不是两个不同的城市


    如何获得输出:巴黎和纽约?

    在您的声明中,您必须使用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";
    
    这是因为您希望同时拥有出生城市和当前居住地。以您上面的例子:


    对于John,如果cities表中的当前行为no.3或no.1,则join要求(您的“ON”部分)应评估为true,因为John与这两个条目都有关系。

    而不是使用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";
    
    这是因为您希望同时拥有出生城市和当前居住地。以您上面的例子:


    对于John,如果cities表中的当前行是第3行或第1行,则加入要求(您的“ON”部分)应评估为真,因为John与这两个条目都有关系。

    您应该加入cities两次

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

    你应该加入城市两次

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