Php 按组从数据库中选择
我刚刚开始编程,很长时间没有。。。但不,有一些东西是有线的,我不知道我是真的生锈了,出了什么问题还是不明白^^ 我的数据库里有一张桌子Php 按组从数据库中选择,php,mysql,Php,Mysql,我刚刚开始编程,很长时间没有。。。但不,有一些东西是有线的,我不知道我是真的生锈了,出了什么问题还是不明白^^ 我的数据库里有一张桌子 id | column1 | column2 | column3 1 | aaaaaaa | 1111111 | zzzzzzz 2 | bbbbbbb | 2222222 | zzzzzzz 3 | ccccccc | 3333333 | zzzzzzz 4 | ddddddd | 4444444 | yyyyyyy 5 | eeeeeee | 55
id | column1 | column2 | column3
1 | aaaaaaa | 1111111 | zzzzzzz
2 | bbbbbbb | 2222222 | zzzzzzz
3 | ccccccc | 3333333 | zzzzzzz
4 | ddddddd | 4444444 | yyyyyyy
5 | eeeeeee | 5555555 | yyyyyyy
6 | fffffff | 6666666 | xxxxxxx
7 | ggggggg | 77777777| zzzzzzz
现在我想选择按column3
分组的整个内容(实际上我不知道它的内容)
我想要达到的结果是:
第一组
1 | aaaaaaa | 1111111 | zzzzzzz
2 | bbbbbbb | 2222222 | zzzzzzz
3 | ccccccc | 3333333 | zzzzzzz
4 | ddddddd | 4444444 | yyyyyyy
5 | eeeeeee | 5555555 | yyyyyyy
6 | fffffff | 6666666 | xxxxxxx
第二组
1 | aaaaaaa | 1111111 | zzzzzzz
2 | bbbbbbb | 2222222 | zzzzzzz
3 | ccccccc | 3333333 | zzzzzzz
4 | ddddddd | 4444444 | yyyyyyy
5 | eeeeeee | 5555555 | yyyyyyy
6 | fffffff | 6666666 | xxxxxxx
第三组
1 | aaaaaaa | 1111111 | zzzzzzz
2 | bbbbbbb | 2222222 | zzzzzzz
3 | ccccccc | 3333333 | zzzzzzz
4 | ddddddd | 4444444 | yyyyyyy
5 | eeeeeee | 5555555 | yyyyyyy
6 | fffffff | 6666666 | xxxxxxx
使用select可以这样做吗?还是我必须选择all并将其填充到一个数组中,设置如下键
foreach($result as $res)
$data[$res['column3']][] = $res;
我不知道为什么,但我的想法是:
SELECT * FROM myTable GROUP BY column3
我会这样做,但我显然错了:)
编辑:解决方案
实际上,column3是一个在编辑时更新的时间戳。它只会更新一次,因此此时间戳只更改一次。我必须在白天选择它,所以我像这样使用它
感谢所有试图帮助您的人使用您的
foreach
想法GROUP BY
用于聚合函数,如COUNT
、SUM
等。使用您的foreach
思想groupby
用于聚合函数,如COUNT
、SUM
等。我喜欢你的foreach
想法,我看不到解决方法,因为你无法从一个查询中获得多个结果。最好的办法是在代码中解析出组。您甚至不需要GROUPBY
子句。我想通过指定一个订单,但即使这样也没有必要
1 | aaaaaaa | 1111111 | zzzzzzz
2 | bbbbbbb | 2222222 | zzzzzzz
3 | ccccccc | 3333333 | zzzzzzz
4 | ddddddd | 4444444 | yyyyyyy
5 | eeeeeee | 5555555 | yyyyyyy
6 | fffffff | 6666666 | xxxxxxx
伪代码:
按第3列从mytable ORDER中选择*代码>
$aryGroups = array();
foreach($result as $row){
if( ! isset($aryGroups[$row['column3']]) ){
$aryGroups[$row['column3']] = array();
}
else{
$aryGroups[$row['column3']][] = $row;
}
}
我已经使用过类似的方法好几次了,但是你可能需要调整它以获得你想要的确切结果。我喜欢你的foreach
想法,我看不到解决方法,因为你无法从一个查询中获得多个结果。最好的办法是在代码中解析出组。您甚至不需要GROUPBY
子句。我想通过
指定一个订单,但即使这样也没有必要
伪代码:
按第3列从mytable ORDER中选择*代码>
$aryGroups = array();
foreach($result as $row){
if( ! isset($aryGroups[$row['column3']]) ){
$aryGroups[$row['column3']] = array();
}
else{
$aryGroups[$row['column3']][] = $row;
}
}
我已经使用过类似的东西好几次了,但是您可能需要调整它以获得您想要的确切结果。使用联合如何?您可以标识每个联接中的组,例如:
SELECT "Group1" AS whichGroup, * FROM myTable WHERE column3 LIKE "zzzzzzz"
UNION ALL
SELECT "Group2" AS whichGroup, * FROM myTable WHERE column3 LIKE "yyyyyyy"
UNION ALL
SELECT "Group3" AS whichGroup, * FROM myTable WHERE column3 LIKE "xxxxxxx"
虽然我已经有一段时间没有使用union了,但是这将为您的输出对它们进行分组,并允许您在MySQL中完成所有操作,尽管我认为在PHP中完成繁重的工作同样容易
如果我是对的,这应该输出如下内容:
whichGroup | id | column1 | column2 | column3
Group1 | 1 | aaaaaaa | 1111111 | zzzzzzz
Group1 | 2 | bbbbbbb | 2222222 | zzzzzzz
Group1 | 3 | ccccccc | 3333333 | zzzzzzz
Group2 | 4 | ddddddd | 4444444 | yyyyyyy
Group2 | 5 | eeeeeee | 5555555 | yyyyyyy
Group3 | 6 | fffffff | 6666666 | xxxxxxx
使用工会怎么样?您可以标识每个联接中的组,例如:
SELECT "Group1" AS whichGroup, * FROM myTable WHERE column3 LIKE "zzzzzzz"
UNION ALL
SELECT "Group2" AS whichGroup, * FROM myTable WHERE column3 LIKE "yyyyyyy"
UNION ALL
SELECT "Group3" AS whichGroup, * FROM myTable WHERE column3 LIKE "xxxxxxx"
虽然我已经有一段时间没有使用union了,但是这将为您的输出对它们进行分组,并允许您在MySQL中完成所有操作,尽管我认为在PHP中完成繁重的工作同样容易
如果我是对的,这应该输出如下内容:
whichGroup | id | column1 | column2 | column3
Group1 | 1 | aaaaaaa | 1111111 | zzzzzzz
Group1 | 2 | bbbbbbb | 2222222 | zzzzzzz
Group1 | 3 | ccccccc | 3333333 | zzzzzzz
Group2 | 4 | ddddddd | 4444444 | yyyyyyy
Group2 | 5 | eeeeeee | 5555555 | yyyyyyy
Group3 | 6 | fffffff | 6666666 | xxxxxxx
一次选择不能返回三个结果。分组依据不是where!?你必须做3个请求where column3='zzzzzzz'
where column3='yyyyyyyy'
where column3='xxxxxxx'
@JayBlanchard,当我使用sub-selects时?带有subs的SELECT仍然返回一个结果。因此我不会使用我的php数组构建…单个SELECT不能返回三个结果。groupby不是where!?你必须做3个请求where column3='zzzzzzz'
where column3='yyyyyyyy'
where column3='xxxxxxx'
@JayBlanchard当我使用sub-SELECT时,一个带有subs的SELECT仍然返回一个结果。因此,我将不讨论我的php数组构建……我应该指出,虽然这会在一个MySQL查询中对它们进行分组并提取数据,我不相信它真的完成了任何使用column3名称本身还没有完成的事情。实际上它是一个巨大的表,我不知道column3的内容。我所知道的唯一一件事是,如果有一个特殊的更新,其中的一些将成为相同的条目。可能我也只需要对字符串中的一部分进行比较(分组)。我应该指出,虽然这确实可以将它们分组并在一个MySQL查询中提取数据,但我不相信它真的可以完成任何使用column3名称本身还没有完成的事情。实际上,它是一个巨大的表,我不知道第3列的内容。我所知道的唯一一件事是,如果有一个特殊的更新,其中的一些将成为相同的条目。我也可以只取字符串的一部分来比较(组)。