0

第 1 部分(MySQL 部分)

我正在使用 CI 和 MySQL(同一台服务器)。我从来没有使用过多个表一起工作,我不确定我是否需要设置关系或者 PHP 是否会为我说话。

这是我要完成的工作:

表:项目(此表是存储每个项目的位置)

表:用户(用户 ID、密码、帐户信息等)

表:集合(这个表会说用户 x 有 # 数量的项目 x)

我已经设置了 Items 和 Users 表,但我不知道如何处理集合表。

第 2 部分(CI/PHP 部分)

一旦我完成了 SQL 设置,让 PHP 在 Collection 中添加/删除/更新列表并根据某人的集合中的内容显示相关信息的最佳方法是什么

前任

项目字段(id、名称、值)

用户字段(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,并且 Collection 表中有以下几行:

编号 | 用户名 | 项目编号 | 数量

1 | 1 | 23 | 1

2 | 1 | 25 | 3

3 | 2 | 20 | 5

4 | 1 | 24 | 1

我希望它只返回第 1、2、4 行以及 itemid 23、25 和 24 的信息。

4

2 回答 2

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 回答
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();

您还可以添加左、右、外、内、左外或右外作为$this->db->join()函数的第三个参数,以允许左连接、右连接等。

我建议尽可能在您的 CodeIgniter 应用程序中使用 Active Record 类。它将帮助您的查询保持干净、有条理和可读性。绝对看看它:http ://ellislab.com/codeigniter/user-guide/database/active_record.html

于 2013-03-18T23:03:09.987 回答