1

私は3つのテーブルを持っています、

user - contains user_id | username | fullname | email etcc
user_profile - contains entry_id |user_id| profile_image_id| user_location etcc
user_profile_images - contains image_id| user_id | file_path | file_thumb | date etcc

ユーザーがサインアップすると、すべての詳細が users テーブルに送られ、user_id も user_profile テーブルに追加され、ユーザーがプロファイル情報を追加するまで残りはデフォルトで NULL に設定されます。

これら 3 つのテーブルからすべてのユーザーのデータを取得するために、model_users にクエリがあり、次のようになります。

$this->db->where('users.user_id', $user_id)->select('*')->from('users');
$this->db->join('user_profile', 'user_profile.user_id = users.user_id', 'left');
$this->db->join('user_profile_images','user_profile_images.image_id = user_profile.profile_image_id','left');

user_profile の profile_image_id フィールドが null でない場合、つまりユーザーが写真をアップロードした場合にのみ機能します。フィールドが null の場合、他のすべてのデータが返されても、ユーザーの user_id は返されません。

私の結合クエリにはフィールド profile_image_id が必要ですが、現在の私の方法は、user_profile の profile_image_id を 1 (デフォルト) に設定することでした。これは一般的なデフォルト イメージです。しかし、ハックを少なくするためにそのクエリを更新する必要があるという事実をまだ乗り越えることはできません。何かアイデアはありますか?

4

3 に答える 3

4

試す

$this->db->select('*')->select('users.user_id')->from('users')
                ->join('user_profile', 'user_profile.user_id = users.user_id', 'LEFT')
                ->join('user_profile_images', 'user_profile_images.image_id = user_profile.profile_image_id', 'LEFT')
                ->group_by('users.user_id')
                ->where('users.user_id', $user_id);
                $query = $this->db->get();
于 2012-11-20T21:38:27.237 に答える
1

テーブルに結合を使用する場合、結合されたすべてのテーブルの列に一意の名前を付ける必要があります。AS 構文で列のエイリアスを追加するか、必要な列を取得するだけです。あなたの場合、エラーはおそらくuser_id3つのテーブルすべてに存在するという事実によるものです。したがって、結果はあなたが経験したようなものです。user_id最後に発生した場合にのみ取得されます。これは、ユーザーが画像をアップロードした場合です。クエリを次のように変更します。

$this->db->where('users.user_id', $user_id);
$this->db->select('users.*,user_profile.user_location,user_profile_images.filepath'); // and other fields of interest...
$this->db->from('users');
$this->db->group_by('users.user_id'); // very useful for not getting multiple rows/user
$this->db->join('user_profile', 'user_profile.user_id = users.user_id', 'left');
$this->db->join('user_profile_images','user_profile_images.image_id = user_profile.profile_image_id','left'); 
于 2012-11-19T22:42:07.383 に答える