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列的内容。我所知道的唯一一件事是,如果有一个特殊的更新,其中的一些将成为相同的条目。我也可以只取字符串的一部分来比较(组)。