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)。