【发布时间】:2012-03-09 09:41:37
【问题描述】:
我是 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 创建)并在那里对其进行一些处理......但它看起来真的很笨重。
有没有更好的解决方案?
【问题讨论】:
-
我看不出有什么问题。另一种方法是不使用
GROUP_CONCAT,而是使用PHP检查迭代中id何时发生变化。 -
感谢您的回复。我虽然也许我错了,在“卷起”部分的某个地方错过了一个技巧,但似乎没有。干杯。
-
不客气。我想这也取决于你的数据集的大小。使用
GROUP_CONCAT可能会降低性能。我不是 MySQL 专家。如果您将 MySQL 标签添加到您的问题中,您可能会收到有关此的反馈。如果您还添加 PHP 标记,您可能会得到进一步的反馈。
标签: codeigniter