0

パート1(MySQLパート)

CIとMySQL(同じサーバー)を使用しています。複数のテーブルを一緒に操作したことはありません。リレーションを設定する必要があるのか​​、PHPが私に代わって話をしてくれるのかわかりません。

これが私が達成しようとしていることです:

テーブル:アイテム(このテーブルは各アイテムが保存される場所です)

表:ユーザー(ユーザーID、パスワード、アカウント情報など)

テーブル:コレクション(このテーブルは、ユーザーxが#アイテムxの量を持っていることを示します)

すでにItemsテーブルとUsersテーブルを設定していますが、コレクションテーブルをどうするか悩んでいます。

パート2(CI / PHPパート)

SQLを設定したら、コレクション内のリストをPHPに追加/削除/更新し、誰かのコレクションにあるものに基づいて関連情報を表示するための最良の方法は何ですか。

アイテムフィールド(id、Name、Value)

ユーザーフィールド(ID、名前、パスワードMD5、最終ログインなど)

コレクションフィールド(id、itemid、userid、amount)

現在ログインしているユーザーのすべてのアイテムを表示できるようにしたいのですが、ログインしているユーザー変数はここから取得されます

function account_info($username)
    {
        $this->db->where('username', $username);
        $query = $this->db->get('user');

        $result = $query->row();

        return array(
            'id' => $result->id,
            'firstname' => $result->firstname,
            'lastname' => $result->lastname,
            'email' => $result->email,
            'joindate' => $result->joindate
            );

    }

私の一意のユーザーIDが1で、次の行がコレクションテーブルにあるとします。

id | ユーザーID| itemid | 額

1 | 1 | 23 | 1

2 | 1 | 25 | 3

3 | 2 | 20 | 5

4 | 1 | 24 | 1

itemid 23、25、24の情報を含む1、2、4行目のみを返したいのですが。

4

2 に答える 2

0

これを行う最善の方法は、SQL クエリで結合ステートメントを使用することです。SQL クエリを書き出すこともできますが、CodeIgniter のアクティブ レコード クラスはこれを簡素化するのに役立ちます ( http://ellislab.com/codeigniter/user-guide/database/active_record.htmlを参照)。モデルでは、次のようなクエリを記述できます。

$this->db->select('*');
$this->db->from('Collections');
$this->db->join('Items', 'Collections.itemid = Company.id', 'inner');

これを微調整して、SQL クエリのように必要な正確なデータを選択することもできます。

$this->db->select('Collections.userid, Collections.amount, Items.name, Items.value');

特定の個人 (たとえば、ID 番号が「1」のユーザー) のデータを選択するには、次を使用できます。

$this->db->where('Collections.userid', '1');

最終的な結果として、完全なクエリは次のようになります。

$this->db->select('*');
$this->db->from('Collections');
$this->db->join('Items', 'Collections.itemid = Company.id', 'inner');
$this->db->where('Collections.userid', '1');
$query = $this->db->get();
return $query->result_array();

関数の 3 番目のパラメーターとして、左、右、外部、内部、左外部、または右外部を追加して、$this->db->join()左結合、右結合などを許可することもできます。

CodeIgniter アプリケーションでは、可能であれば Active Record クラスを使用することをお勧めします。これにより、クエリを整理し、整理し、読みやすくすることができます。ぜひご覧ください: http://ellislab.com/codeigniter/user-guide/database/active_record.html

于 2013-03-18T23:03:09.987 に答える
0
$query='SELECT * 
FROM Collections 
INNER JOIN Items ON Collections.itemid=Items.id 
WHERE userid=?';
$params=array();
$params[]=$user_id;

$result=$this->db->query($query,$params);
$result=$result->result_array();
//$result=$result->row_array(); // for single row

print_r($result); //for your debugging
return $result;
于 2013-03-18T21:23:13.803 に答える