我是codeigniter的新手(尽管我认为这不是一个专门的CI问题)并且在模型中有一个方法,它从两个由id连接的表中选择数据。
表1(tblclients)看起来像这样:
+----+------------+
+ id + c_name +
+----+------------+
+ 1 + Joe Bloggs +
+ 2 + Jim Bloggs +
+ 3 + Tim Bloggs +
+----+------------+
表2(tblstars)看起来像这样:
+----+------------+
+ id + s_date +
+----+------------+
+ 1 + 27/01/12 +
+ 1 + 15/02/12 +
+ 1 + 18/02/12 +
+ 2 + 03/01/12 +
+ 2 + 11/02/12 +
+ 2 + 15/02/12 +
+ 3 + 01/01/12 +
+ 3 + 19/02/12 +
+----+------------+
我想将连接数据“汇总”为tblclients中每行的一行,以便输出,例如:
+----+------------+--------------------------------+
+ id + Name + Dates +
+----+------------+--------------------------------+
+ 1 + Joe Bloggs + 27/01/12 15/02/12 18/02/12 +
+ 2 + Jim Bloggs + 03/01/12 11/02/12 15/02/12 +
+ 3 + Tim Bloggs + 01/01/12 19/02/12 +
+----+------------+--------------------------------+
现在我已经通过在我的模型中使用以下内容“解决”了这个问题:
function get_clients_concat()
{
$query = $this->db
->select('tblclients.id, tblclients.c_name, GROUP_CONCAT(tblstars.s_date SEPARATOR "#") AS star_dates', NULL, FALSE)
->join('tblstars', 'tblstars.id = tblclients.id', 'left')
->order_by('tblclients.id')
->group_by('tblclients.id')
->get('tblclients');
return $query->result();
}
然后在我的视图中展开数组(由GROUP_CONCAT创建)并在那里进行一些处理......但它看起来真的是CLUNKY。
有更好的解决方案吗?
答案 0 :(得分:0)
如果你想在一个查询中获取所有数据(每行的id唯一),那么是 - 这就是你要走的路。
如果您需要对结果进行排序或过滤,那么当表格填满时您将遇到性能瓶颈。
看起来很奇怪 - 你为什么不选择tblstars
(加入tblclients
),然后使用应用程序逻辑来按c_name
/ {{1}索引日期}?
id