如何在JOIN查询结果中标识具有相同名称的不同表中的字段?

时间:2010-10-18 16:22:04

标签: php mysql left-join table-alias

我正在使用LEFT JOIN在MYSQL中运行查询以获取用户及其用户组。两个表都有名为id的列。我的结果是以数组(PHP)返回,因此我有一个包含所有字段数据的数组,但也只有一个数组[“id”]。

到目前为止,这是我的查询:

  

SELECT usr.id,usg.id FROM users usr   LEFT JOIN(user_groups usg)ON   (usg.id = usr.group_id)

现在,简单的解决方案是将字段重命名为usr_id和usg_id等唯一名称,但我不愿意。我宁愿让我的值自动返回数组作为数组[“usr.id”]。

(我正在使用CodeIgniter框架自动完成剩下的工作,但如果只有MySQL可以用它返回表别名,我可以重写一些东西)

2 个答案:

答案 0 :(得分:2)

使用'as'关键字

select table1.id as table1Id, table2.id as table2Id
from table1
join table2
on somecondition

答案 1 :(得分:0)

告诉mysql你想使用“as'newname'”进行动态重命名

SELECT usr.id as 'user_id', usg.id FROM users usr LEFT JOIN (user_groups usg) ON (usg.id=usr.group_id)

或使用doctrine本身做DQR风格:

$resultArray = Doctrine_Query::create()
                        ->select('usr.id, usg.id')
                        ->from('users usr')
                        ->leftJoin('usr.user_groups usg')
                        ->setHydrationMode(Doctrine::HYDRATE_ARRAY)
                        ->execute();

这应该返回一个数组,你可以像这样访问两个id:

$resultArr['id']; //for accessing the usr.id

并根据您在用户和user_groups之间建立的关联

来选择其中一个
$resultArr['user_groups']['id']; //for accessing the usg.id if it is one to one
$resultArr['user_groups'][0]['id']; //for accessing the usg.id if it is a one to many