- MySQLi 教程
- MySQLi - 首页
- MySQLi - 简介
- MySQLi - PHP 语法
- MySQLi - 连接
- MySQLi - 创建数据库
- MySQLi - 删除数据库
- MySQLi - 选择数据库
- MySQLi - 创建表
- MySQLi - 删除表
- MySQLi - 插入查询
- MySQLi - 选择查询
- MySQLi - WHERE 子句
- MySQLi - 更新查询
- MySQLi - 删除查询
- MySQLi - LIKE 子句
- MySQLi - 排序结果
- MySQLi - 使用连接
- MySQLi - 处理 NULL 值
- 获取和使用 MySQLi 元数据
- MySQL
- MySQL - 安装
- MySQL - 管理
- MySQL - 数据类型
- MySQL - 正则表达式
- MySQL - 事务
- MySQL - ALTER 命令
- MySQL - 索引
- MySQL - 临时表
- MySQL - 克隆表
- MySQL - 使用序列
- MySQL - 处理重复项
- MySQLi 有用资源
- MySQLi - 有用函数
- MySQLi - 快速指南
- MySQLi - 有用资源
- MySQLi - 讨论
MySQLi - 使用连接
在之前的章节中,我们一次从一个表中获取数据。这对于简单的任务来说已经足够了,但在大多数真实的 MySQL 使用场景中,您通常需要在单个查询中从多个表中获取数据。
您可以在单个 SQL 查询中使用多个表。在 MySQL 中,连接是指将两个或多个表合并成一个表。
您可以在 SELECT、UPDATE 和 DELETE 语句中使用 JOIN 来连接 MySQL 表。我们还将看到 LEFT JOIN 的示例,它与简单的 MySQL JOIN 不同。
在命令提示符下使用连接
假设我们在 TUTORIALS 中有两个表 **tcount_tbl** 和 **tutorials_tbl**。现在来看下面的例子:
示例
以下示例:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
现在我们可以编写一个 SQL 查询来连接这两个表。此查询将从 **tutorials_tbl** 表中选择所有作者,并从 **tcount_tbl** 表中选择相应的教程数量。
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count → FROM tutorials_tbl a, tcount_tbl b → WHERE a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
在 PHP 脚本中使用连接
PHP 使用 **mysqli_query()** 或 **mysql_query()** 函数通过 JOIN 从 MySQL 表中获取记录。此函数接受两个参数,成功时返回 TRUE,失败时返回 FALSE。
语法
$mysqli→query($sql,$resultmode)
| 序号 | 参数和描述 |
|---|---|
| 1 |
$sql 必需 - 使用 JOIN 从多个表获取记录的 SQL 查询。 |
| 2 |
$resultmode 可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT 之一,具体取决于所需的行为。默认情况下,使用 MYSQLI_STORE_RESULT。 |
首先使用以下脚本在 MySQL 中创建一个表并插入两条记录。
create table tcount_tbl(
tutorial_author VARCHAR(40) NOT NULL,
tutorial_count int
);
insert into tcount_tbl values('Mahesh', 3);
insert into tcount_tbl values('Suresh', 1);
示例
尝试以下示例以使用 JOIN 从两个表中获取记录:
复制并粘贴以下示例作为 mysql_example.php:
<html>
<head>
<title>Using joins on MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root@123';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if($mysqli→connect_errno ) {
printf("Connect failed: %s<br />", $mysqli→connect_error);
exit();
}
printf('Connected successfully.<br />');
$sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author';
$result = $mysqli→query($sql);
if ($result→num_rows > 0) {
while($row = $result→fetch_assoc()) {
printf("Id: %s, Author: %s, Count: %d <br />",
$row["tutorial_id"],
$row["tutorial_author"],
$row["tutorial_count"]);
}
} else {
printf('No record found.<br />');
}
mysqli_free_result($result);
$mysqli→close();
?>
</body>
</html>
输出
访问部署在 Apache Web 服务器上的 mysql_example.php 并验证输出。
Connected successfully. Id: 1, Author: Mahesh, Count: 3 Id: 2, Author: Mahesh, Count: 3 Id: 3, Author: Mahesh, Count: 3 Id: 5, Author: Suresh, Count: 1
MySQL LEFT JOIN
MySQL 左连接与简单的连接不同。MySQL LEFT JOIN 对左侧的表给予额外的考虑。
如果我使用 **LEFT JOIN**,我会得到所有匹配的记录,此外,我还为左表中每个不匹配的记录获得额外的记录:因此,在我的示例中,确保每个作者都会被提及。
示例
尝试以下示例以了解 LEFT JOIN。
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count → FROM tutorials_tbl a LEFT JOIN tcount_tbl b → ON a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
您需要进行更多练习才能熟悉 JOIN。这在 MySQL/SQL 中是一个稍微有点复杂的概念,在进行实际示例时会变得更加清晰。