使用PDO获取按特定列分组的所有行,并选择所有列

时间:2016-11-03 09:00:21

标签: php mysql pdo

我想将PDO的fetchAll()方法与\PDO::FETCH_GROUP选项一起使用。

但是\PDO::FETCH_GROUP使用第一列作为键对结果进行分组。我的查询选择了所有字段:

SELECT * FROM `my_table`;

my_table有很多字段,很有可能在将来添加新字段。我不喜欢这个想法是逐个指定查询中的所有字段。

表格如下:

| my_table |
+----------+
| id       |
| type     |
| a_field  |
| b_field  |
| ...      |

是否有可能在SELECT * FROM my_table字段使用type和分组?

我尝试了以下查询,但它引发了异常:

$sql = "SELECT type, * FROM my_table";
$result = $pdo->query($sql)->fetchAll(\PDO::FETCH_GROUP);

例外:

  

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在MyClass.php中的'* FROM my_table WHERE类型IN('typeA','typeB','typeC')'第1行'附近使用正确的语法在第XXX行

1 个答案:

答案 0 :(得分:2)

只需在星号中加上表名:

$sql = "SELECT type, my_table.* FROM my_table";
$result = $pdo->query($sql)->fetchAll(\PDO::FETCH_GROUP);