从组中选择数据库

时间:2014-11-17 16:39:55

标签: php mysql

我刚刚回到编程中,很长一段时间没有...但是没有任何有线的东西,我不知道我是否真的生锈并且有什么不对或者只是没有得到它^^

我的数据库中有一张表

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

这可以通过选择吗?或者我必须选择全部并将其填充到设置键的数组中

foreach($result as $res)
    $data[$res['column3']][] = $res;

我不知道为什么,但我的想法是:

SELECT * FROM myTable GROUP BY column3

会做到这一点,但我明显错了:)

编辑:解决方案

  

实际上,column3是一个在编辑时获得更新的时间戳。它只会更新一次,所以这个   时间戳只改变一次。我必须在Day之前选择它,所以我像这样使用它......

$result = $this->pdo->query("SELECT dbx_id, ordernumber, debited, timestamp FROM " . TABLE_HISTORY . " WHERE dbx_id=:dbx_id AND debited=1", array(":dbx_id" => $dbx_id), true);

foreach($result as $part){
    $data[date('d-m-Y', strtotime($part['timestamp']))][] = $part;
}

感谢所有试图提供帮助的人

3 个答案:

答案 0 :(得分:2)

使用您的foreach提示。 GROUP BY适用于COUNTSUMSee manual等汇总函数。

答案 1 :(得分:2)

我喜欢您的foreach想法,而且我无法看到解决方法,因为您无法从一个查询中获得多个结果。您最好的选择是在代码中解析组。你甚至不需要GROUP BY条款。我会指定一个ORDER BY,但即使这样也没有必要。

伪码:

SELECT * FROM mytable ORDER BY column3;

$aryGroups = array();
foreach($result as $row){
  if( ! isset($aryGroups[$row['column3']]) ){
    $aryGroups[$row['column3']] = array();
  }
  else{
    $aryGroups[$row['column3']][] = $row;
  }
}

我已经使用了几次这样的东西,但你可能需要调整它以获得你想要的确切结果。

答案 2 :(得分:0)

使用联盟怎么样?您可以识别每个联接中的组,例如:

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"

由于我使用了一个联合,因为它已经有一段时间了,因为我已经使用了一个联合,但是它会将它们分组为你的输出,并允许你在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