我在MySQL数据库中有几个类似于这个设置的表:
主要表
---------------------
| id | name |
|-------------------|
| 0 | Architecture |
| 1 | Biology |
| 2 | Chemistry |
---------------------
大学表
----------------------
| id | name |
|--------------------|
| 0 | Georgia Tech |
| 1 | Virginia Tech |
| 2 | Cal Tech |
----------------------
用户表
----------------------------------------------
| id | name | major_id | college_id |
|--------------------------------------------|
| 0 | John Smith | 2 | 0 |
| 1 | Kevin Lee | 2 | 1 |
| 2 | Matt Anderson | 0 | 2 |
----------------------------------------------
使用PHP,我希望使用类似于此的查询获取用户的所有信息:
SELECT * FROM users WHERE name=`$user`
MySQL是否有某种方式可以自动将“major_id”和“college_id”列链接到“major”和“college”表,其中上述查询将返回适当的值?
如果单个查询无法实现,多个查询是否会大大降低性能?
答案 0 :(得分:1)
联接是您正在寻找的,在这种情况下您的SQL将是:
SELECT `users`.`name`, `major`.`name`, `college`.`name`
FROM `users` WHERE `users`.`name`='name'
INNER JOIN `major` ON `major`.`id`=`users`.`major_id`
INNER JOIN `college` ON `college`.`id`=`users`.`college_id`
您还可以为您的字段名称添加别名,以便您可以使用更多内容:
SELECT `users`.`name` AS `applicant_name`, `major`.`name` AS `major_name`, `college`.`name` AS `college_name`
FROM `users` WHERE `users`.`name`='name'
INNER JOIN `major` ON `major`.`id`=`users`.`major_id`
INNER JOIN `college` ON `college`.`id`=`users`.`college_id`
加入的详情
答案 1 :(得分:1)
SELECT * FROM users WHERE name='$user'
此查询(您的返回标记为$ user,后标记为列名,使用双/单引号)将仅返回users表中的值。你不能让MySQL“自动地”构建你的连接。您必须明确地执行此操作,否则,如果您愿意,您将如何仅从users表获取信息?使用这样的JOIN:
SELECT users.name AS Username, college.name AS College, major.name AS Major
FROM users
INNER JOIN college ON users.college_id = college.id
INNER JOIN major ON users.major_id = major.id
通过仅选择您真正需要的列来限制检索的列。所以不要使用星号,而是写users.name
等等。