让SQL表字段自动链接到查找表

时间:2011-08-01 16:36:46

标签: php mysql

我在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”表,其中上述查询将返回适当的值?

如果单个查询无法实现,多个查询是否会大大降低性能?

2 个答案:

答案 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`

有关http://dev.mysql.com/doc/refman/5.0/en/join.html

加入的详情

答案 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等等。

JOIN syntax中描述了MySQL Docs