2

ユーザーとそのユーザー グループを取得するために、LEFT JOIN を使用して MYSQL でクエリを実行しています。両方のテーブルには、id という名前の列があります。結果は配列 (PHP) で返されるため、すべてのフィールド データを含む配列が 1 つだけでなく、配列 ["id"] も 1 つだけになります。

これまでの私のクエリは次のとおりです。

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

'as'キーワードを使用する

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

「as'newname'」を使用してオンザフライで名前を変更することをmysqlに通知するだけです。

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

そして、usersとuser_groupsの間で作成した関連付けに応じて、これらのいずれか1つを選択します。

$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 に答える