2016-11-03 3 views
1

Я хочу использовать метод PDO fetchAll() с опцией \PDO::FETCH_GROUP.Извлеките все строки, сгруппированные по определенному столбцу, используя PDO и выбрав все столбцы

Однако \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); 

Исключение:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM my_table WHERE type IN ('typeA', 'typeB', 'typeC')' at line 1' in MyClass.php on line XXX

+0

* Что * Исключение бросили? Хорошо, вы не удосужились прочитать, что он говорит, но можете ли вы хотя бы опубликовать его здесь, чтобы другие люди поняли, что происходит не так? –

+0

Извините, я добавил исключение. Конечно, я прочитал исключение, и я думаю, что запрос не является корректным SQL с использованием 'type, *'. –

ответ

2

Просто взвешивать звездочку с именем таблицы:

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

Работает как очарование! Благодаря! –

Смежные вопросы