我应该使用GROUP_CONCAT吗?

时间:2011-07-11 00:45:54

标签: php mysql codeigniter concatenation

我有2个表CP和CS结构如下。

CP
    id    tu    su
    1     7     1
    2     7     2

.---------------------------------。

CS
    id    st    cp
    1     8     1
    2     9     1
    3     9     2
    4     2     1

.--------------------------------。

我想创建一个函数get_cp($ tu)来返回这样的数据。 get_cp(7)=

su
    '1'
        [0] = array('st'=>'8')
        [1] = array('st'=>'9')
        [2] = array('st'=>'2')
    '2'
        [0] = array('st'=>'2')

似乎我可以使用GROUP_CONCAT来制作一个X分隔字符串,然后解析它...但我想知道是否有一种“更好”的方式。解析字符串似乎很浪费,如果mySQL可以像这样返回数据,这将是很好的。 我应该根本不使用GROUP,然后在我有一个重复的重复列表之后使用php将事物分组在一起吗?

谢谢!如果您不确定我在问什么,请提出问题。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用GROUP_CONCAT()。一般来说,我认为如果你能在数据库方面做到这一点,你应该这样做。

但是,在这种情况下,无论您使用什么查询,都必须循环结果以构造您描述的数组。

因此,我将执行以下查询并使用PHP构建分组。

$data = array();
$results = mysql_query('SELECT st, cp FROM CS');

while ($row = mysql_fetch_assoc($results)) {
  $data[$row['cp']][] = $row['st'];
}

注意:这不是为了提高性能而订购的。如果您按特定顺序需要它们,请添加ORDER BY