Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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/mysql/72.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 mysql(i):从多个表中选择数据?_Php_Mysql_Database - Fatal编程技术网

Php mysql(i):从多个表中选择数据?

Php mysql(i):从多个表中选择数据?,php,mysql,database,Php,Mysql,Database,如果我有两张桌子。第一个包含用户ID和他们的名字。第二个表保存用户ID和他们的姓氏,但此表中的行可能存在,也可能不存在,这取决于用户是否给出了他们的姓氏 我想同时选择名字和姓氏,但如果只有名字存在,则只需自己选择 我不能使用这样的内容,因为如果第二个表行不存在,那么它将不返回任何内容: $db->query("select firstname.fname, lastname.lname from firstname, lastname where firstname.userid = la

如果我有两张桌子。第一个包含用户ID和他们的名字。第二个表保存用户ID和他们的姓氏,但此表中的行可能存在,也可能不存在,这取决于用户是否给出了他们的姓氏

我想同时选择名字和姓氏,但如果只有名字存在,则只需自己选择

我不能使用这样的内容,因为如果第二个表行不存在,那么它将不返回任何内容:

$db->query("select firstname.fname, lastname.lname from firstname, lastname where firstname.userid = lastname.userid");
谢谢

SELECT f.fname, l.lname
FROM firstname f
   LEFT JOIN lastname l
      ON f.userid = l.userid
这将返回如下结果:

fname | lname
John  | Doe
Bob   | NULL
其中
NULL
表示Bob没有姓


JOIN
比您在示例中使用的笛卡尔乘积性能更好,因为它不会生成所有可能的
{firstname,lastname}
组合,而只生成有意义的组合(具有相同用户ID的组合)

现在是开始学习不同连接的时候了。。。。读一读。。。这是一个很好的解释,应该会让你走上正确的道路。没有连接就没有办法做到这一点;从本质上讲,执行从两个表检索数据的查询需要连接。。。了解不同的SQL连接确实很有价值,何时以及如何使用它们MF是firstname的别名,因此当您在查询中引用firstname时,可以只使用f,这只是为了简洁起见