2

我正在使用 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,但我不喜欢这样做。我宁愿让我的值作为 array["usr.id"] 自动返回到数组中。

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

4

2 回答 2

2

use the 'as' keyword

select table1.id as table1Id, table2.id as table2Id
from table1
join table2
on somecondition
于 2010-10-18T16:26:13.640 回答
0

just tell mysql that you want to do an on the fly rename using "as 'newname'"

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

or using doctrine itself do it DQR style:

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

this should return an array where you can access both id's like that:

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

and eiter one of these both depending on the association you made between users and 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
于 2010-10-18T16:26:36.217 回答