Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在按单个字段分组的列表中构建数组数组_Mysql_Cakephp - Fatal编程技术网

Mysql 如何在按单个字段分组的列表中构建数组数组

Mysql 如何在按单个字段分组的列表中构建数组数组,mysql,cakephp,Mysql,Cakephp,我有一个包含许多类似数据的项目的表格,如: 项目详情 id name value item_id 1 Toy 10300 1 2 Toy2 10103 1 3 Title One 1 4 Toy 300 2 5 Price 103 2 6 Exp 2020 2 我想使用一个使用CakePHP 2.x的find方法,该方法读取所有数据,并按照item_id值

我有一个包含许多类似数据的项目的表格,如:

项目详情

id   name     value   item_id
1    Toy      10300   1
2    Toy2     10103   1
3    Title    One     1
4    Toy      300     2
5    Price    103     2
6    Exp      2020    2
我想使用一个使用CakePHP 2.x的find方法,该方法读取所有数据,并按照item_id值对数组中的所有项进行分组。这是一个数组,每个元素都包含一个数组,该数组包含具有相同item_id的所有值。因此该数组如下所示:

Array
(
 [0] => Array
     (
      [0] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 1
                    [name] => Toy
                    [value] => 10300
                    [item_id] => 1
                )

        )

    [1] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 2
                    [name] => Toy1
                    [value] => 103003
                    [item_id] => 1
                )

        )

    [2] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 3
                    [name] => Title
                    [value] => One
                    [item_id] => 1
                )
        )
   )
 [1] => Array
  (

    [0] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 4
                    [name] => Toy
                    [value] => 300
                    [item_id] => 2
                )

        )

    [1] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 5
                    [name] => Price
                    [value] => 300
                    [item_id] => 2
                )


        )

    [2] => Array
        (
            [ItemDetail] => Array
                (
                    [id] => 6
                    [name] => Exp
                    [value] => 2020
                    [item_id] => 2
                )
        )
    )
)
我尝试了一些分组的想法,但是它似乎删除了所有字段值,除了它在表中找到的第一个字段值。我真的不想聚合数据,而是将所有具有类似item_id的数据分组到自己的数组中


有人能给我指出正确的方向吗?我想用一个find语句来实现这一点,这样我就可以使用paginate了。我已经成功地使用conditions=>id=(预期项的列表)重复查找,并根据每次调用的结果构建数组。但似乎应该有更好的方法。

Sql聚合和分组方式并不能真正帮助您完成所需的任务。您需要做的事情大致如下:

按查询中的项目id对sql结果集排序

比如:

select id,
       name,
       value,
       item_id
from ItemDetails
order by item_id
$temp_item_id = -1;
$i = -1;
$result = array();
foreach($statement->fetchRow() as $row) {
    if ($row['item_id'] !== $temp_item_id) {
        ++$i;
        $result[$i] = array();
    }
    $temp_item_id = $row['item_id'];
    $result[$i][] = array('ItemDetail' => $row);
}
逐步遍历结果集,在临时变量中跟踪上一个项目的id。当当前行的item_id与前一行不匹配时,则是时候开始外部数组的新元素了

比如说:

select id,
       name,
       value,
       item_id
from ItemDetails
order by item_id
$temp_item_id = -1;
$i = -1;
$result = array();
foreach($statement->fetchRow() as $row) {
    if ($row['item_id'] !== $temp_item_id) {
        ++$i;
        $result[$i] = array();
    }
    $temp_item_id = $row['item_id'];
    $result[$i][] = array('ItemDetail' => $row);
}

谢谢,但我提到我已经在手动分组了。我正在寻找一个将元素连接在一起的查询,其结构与我前面提到的类似。如果您没有使用过cakephp,那么您可能不明白为什么,因为没有这样的查询。然而,你可以用group_concat来模拟它。类似于:选择group_concat(id)作为id,group_concat(名称)作为名称,group_concat(值)作为值,ItemDetails group by item中的item_id你想为这个查询创建一个cakephp find方法“select*from ItemDetails order by item_id”,如果我错了,请纠正我。诀窍是我希望结果分组在一个数组中。所以数组[0]=数组(所有元素的项id=1),数组[1]=数组(所有元素的项id=2)。