2013-03-18 71 views
0

我不知道我知道问这个问题的最好方法,所以对我一无所知。CodeIgniter框架/多个MySQL表

第1部分(MySQL的部分)

我使用CI和MySQL(同一台服务器)。我从未与多个表一起工作,我不确定是否需要建立关系,或者PHP是否会为我说话。

这里就是我试图完成:

表:项目(本表为每个项目存储)

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

表:集(该表会说,用户x具有项x的#量)

我已经有项目与用户表的设置,但我难倒如何处理收集一个做。

第2(CI/PHP的一部分)

一旦我有SQL设置,什么是最好的方法基于关闭的有PHP添加/集合中删除/更新列表和显示相关的信息是什么是某人的收集

防爆

项目字段(ID,姓名,值)

领域的用户(ID,姓名,密码MD5,最后登录等)

中个

收藏领域(ID,商品ID,用户ID,数量)

我想能够显示当前登录的用户,登录用户变量的所有项目从这里

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

我希望它只返回第1,2,4行和第23,25和24位的信息。

我确定这篇教程介绍了如何在PHP框架的CI框架中完成此操作,但是我一直无法找到它。

回答

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; 
+0

这工作完美!!!!万分感谢! – Andrew 2013-03-18 22:58:08

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'); 

要选择的数据一个特定的个体(例如,用“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

+0

如果您将查询链接起来以使其可读,看起来会更简单 – killstreet 2016-07-18 15:06:40