1

私はテーブルのこの構造を持っています:

Table Name: collisions
Fields: id, creator1, creator2
(1, 1, 2) - simple data in my sql table

Table Name: creators
Fields: id, artistname
(1, john smith)- simple data in my sql table
(2, steven michael)- simple data in my sql table

私が必要とするのは、これらのテーブルを結合して、creator1 ID と Creator 2 ID の代わりにアーティスト名を取得できるようにすることです。

これは私がこれまでに行ったことです:

$this->db->select('collisions.*, creators.artist_name AS cr1, creators.artist_name as cr2');
$this->db->join('creators', 'collisions.creator1 = cr1.id AND collisions.creator2 = cr2.id', 'left');
$data = $this->db->get('collisions')->result();

しかし、私はこのエラーが発生しています:

Unknown column 'cr1.id' in 'on clause'

SELECT `collisions`.*, `creators`.`artist_name` AS cr1, `creators`.`artist_name` as cr2 FROM (`collisions`) LEFT JOIN `creators` ON `collisions`.`creator1` = `cr1`.`id` AND collisions.creator2 = cr2.id

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

0

エイリアスの代わりに実際のテーブル名を使用してください:

$this->db->select('collisions.*, creators.artist_name AS cr1, creators.artist_name as cr2');
$this->db->join('creators', 'collisions.creator1 = creators.id AND collisions.creator2 = creators.id', 'left');
$data = $this->db->get('collisions')->result();

エイリアスを使用できない理由は、SQLの実行が次の順序であるためです。

1)FROM clause
2)WHERE clause
3)GROUP BY clause
4)HAVING clause
5)SELECT clause
6)ORDER BY clause 

where句の後に実行されるselect句で作成されたエイリアスを使用していたためです。

そのため、存在しないエイリアスは使用できません。

于 2013-01-08T12:50:07.780 に答える
0

これは仕事をしました

    $this->db->select('collisions.*, cr1.artist_name as cr1, cr2.artist_name as cr2');
    $this->db->join('creators AS cr1', 'collisions.creator1 = cr1.id', 'left');
    $this->db->join('creators AS cr2', 'collisions.creator2 = cr2.id', 'left');
    $data = $this->db->get('collisions')->result();
于 2013-01-08T15:09:13.823 に答える