php - 从两个表查询时如何使用外键

标签 php mysql sql

我的问题很基本。 它是关于如何使用外键从两个表中选择某些信息来构建我的查询?

table vehicles
+-------+----------+------------+
| id_car| car_model| car_owner  |
+-------+----------+------------+
|  1    |       VW |         132|
+-------+----------+------------+
|  2    |       VW |         200|
+-------+----------+------------+
table users
+-------+----------+------------+
|user_id| user_name| user_phone |
+-------+----------+------------+
|  132  |     Peter|    555-555 |
+-------+----------+------------+
|  200  |      Jim |    555-333 |
+-------+----------+------------+

car_ownervehicles 表中的外键,它引用 users 表的主键 user_id

所以有人正在搜索所有大众汽车,我希望像 html 一样填充以下信息(是的,我知道这不是正确的方法 - 我使用它只是为了简化示例并显示来自每个表去):

>    echo "Car model:". `vehicles.car_model`
>    echo "Car owner:". `users.user_name`
>    echo "Contacts: ". `users.user_phone`

提前致谢。

最佳答案

我不确定您是否了解外键的用途。外键基本上表示“对于此条目,父表中必须有一个条目”。你说 user_id 是 vehicle 表中的外键,我不清楚。

那么,假设您有一个这样的表定义:

CREATE TABLE vehicles
(`id_car` int, `car_model` varchar(2), `car_owner` int);


CREATE TABLE users
(`user_id` int, `user_name` varchar(5), `user_phone` varchar(7)
, CONSTRAINT `fk_your_foreign_key` FOREIGN KEY (user_id) REFERENCES vehicles(car_owner)
);

当您要向表中插入新用户时,user_id 必须是 vehicles 表中 car_owner 列中的现有条目。

外键用于执行业务规则。每个用户都必须是车主吗?或者反过来,是否每辆车都必须由某人拥有?如果您对这两个问题的回答都是否定的,那么在这种情况下不要实现任何外键。但是,如果您可以肯定地回答"is",请这样做。

要获取您正在寻找的信息,只需执行

SELECT 
* 
FROM 
vehicles 
INNER JOIN users ON vehicles.car_owner = users.user_id

关于php - 从两个表查询时如何使用外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969170/

相关文章:

php - 为 timelinejs 拉取 mysql 数据?

PHP preg_replace 符号

php - iconv 还是 mbstring?

php - 如何在 foreach 循环之前/之后触发代码,仅当在 PHP 7.4+ 中以有效方式输入此循环?

mysql - 重命名sql中的重复数据

mysql - 用于存储指标的数据库架构/设计

java - 当 SQL 子句需要 "disappear"来表示退化情况时,有没有办法使用 @Bind 而不是 @Define?

SQL SELECT FREETEXT 按等级排序

SQL 分割字符串并获取 NULL 值而不是空字符串

PHP HTML 表单保留输入的数据和 isset()