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

Back to archive index

Kenji Suzuki kenji****@gmail*****
2012年 2月 21日 (火) 17:30:36 JST


Kenji です。


On Tue, 21 Feb 2012 17:24:27 +0900
Akihiko Noda <noda****@cariy*****> wrote:

> 佐々木さん
> 
>  Nodaです。返信ありがとうございます。
> 
>  はい、そうですね。現在は、以下のように指定しています。
> $this->db->select('DEFAULT_KEYWORD_RANK.DEFAULT_KEYWORD_SID,DEFAULT_KEYWORD_RANK.CONTENT_SID,CONTENT.ARTIST,CONTENT.TITLE,DEFAULT_KEYWORD_RANK.RANK');
> 
>  しかし、以下のように”CONTENT.RANK,DEFAULT_KEYWORD_RANK.RANK”と両方書くと同じエラーになります。
> $this->db->select('DEFAULT_KEYWORD_RANK.DEFAULT_KEYWORD_SID,DEFAULT_KEYWORD_RANK.CONTENT_SID,CONTENT.ARTIST,CONTENT.TITLE,CONTENT.RANK,DEFAULT_KEYWORD_RANK.RANK');
> 
>  なので、このテーブル名も含めて別モノと認識してくれれば、問題なくなるのではないかと思った次第です。

コラム名にエリアス付けたらどうでしょう?

参考:
http://chrissilich.com/blog/codeigniter-active-record-aliasing-column-names-to-prevent-overwriting-especially-columns-named-id/


// Kenji

 
>  引き続きよろしくお願いします。
> 
>  以 上//
> 
> 
> (2012/02/21 15:58), クロスキューブ佐々木 wrote:
> > $this->db->select("DEFAULT_KEYWORD_RANK.RANK");
> > の様にselectで明示的にカラムを指定したらどうでしょうか?
> >
> > --
> > ■::
> > □■::-----------------------------------------------
> > ■::
> > XROSS CUBE
> >
> >  佐々木 多生
> >  Tao Sasaki
> > --------------------------------------------------■□
> >
> >
> >
> > 2012年2月21日12:59 Akihiko Noda <noda****@cariy*****>:
> >> 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 mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




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