[Codeigniter-users] join時に同一名称のカラムがある場合の処置

Back to archive index

Akihiko Noda noda****@cariy*****
2012年 2月 21日 (火) 12:59:12 JST


Nodaと申します。
お世話になっております。

現在、CodeIgniterを使って、システム専用のCMSを制作しています。

今、CONTENTテーブルとDEFAULT_KEYWORD_RANKテーブルの2つのテーブルがあります。

DEFAULT_KEYWORD_RANKテーブルには、たとえば”hot”というキーワードに関するランキングを設定できるようにしています。
CONTENTテーブルはベースとなるテーブルで、コンテンツのTITLE、ARTIST、TYPEなどのデータが設定してあります。
両テーブルは、CID(コンテンツID)というシステム一意の番号で結び付けています。

なので、DEFAULT_KEYWORD_RANKテーブルを引くときに、CONTENTテーブルをjoinして、TITLE、ARTISTなど を合わせて読むようにします。

この時、両テーブルの全カラムのデータを読もうと思ったのですが、うまく行きませんでした。(Internal Server Error)
原因は、両テーブルに同一名称のカラム(RANK)があるからでした。

$this->db->from('DEFAULT_KEYWORD_RANK');
$this->db->join('CONTENT', 'DEFAULT_KEYWORD_RANK.CONTENT_SID=CONTENT.SID');
$this->db->where('DEFAULT_KEYWORD_RANK.DEFAULT_KEYWORD_SID =', '3303');
$this->db->order_by($sidx, $sord);
$this->db->limit($limit, $start);
$query = $this->db->get();

エラーメッセージは以下です。

DEBUG - 2012-02-21 10:52:41 --> DB Transaction Failure
ERROR - 2012-02-21 10:52:41 --> Query error: Column 'RANK' in order clause is ambiguous

実際にやりたいことは以下のコマンドのようなことで、これは成功します。

select * from DEFAULT_KEYWORD_RANK join CONTENT on DEFAULT_KEYWORD_RANK.CONTENT_SID=CONTENT.SID where DEFAULT_KEYWORD_RANK.DEFAULT_KEYWORD_SID=3303;

resultに同じ名前のフィールドを作ろうとしてしまうからでしょうか?

今のところ、必要なカラムの名前を重ならないように指定して読むようにしています。
ですが、実際には、resultにテーブル名のprefixをつけるなどして識別できなければならないように思います。
そうする方法は現時点でありますでしょうか?
もしあれば教えていただきたく思います。

以上、よろしくお願いいたします。

以 上//




Codeigniter-users メーリングリストの案内
Back to archive index