Я пытаюсь преобразовать старое приложение Symfony 1.4 из MySQL в PostgreSQL.Группа по проблеме преобразования MySQL в PostgreSQL
Я снова и снова сталкиваюсь с тем же вопросом.
У меня есть длинное соединение, и он всегда жалуется, что у меня есть группа ... и в некоторых случаях я добавляю группу By, и она просит другого.
Я новичок в postgres, и я понятия не имею, что происходит.
Ниже приведены запросы доктрины и сообщения об ошибках.
public function getClassifieds($gs_id, $sort_param, $sorter) {
$q = Doctrine_Query::create()
->select('a.*, u.*, t.*,ug.*,ur.*, avg(ur.rating) as rating ')
->from('Items a')
->leftJoin('a.MonitoredAds ma ON ma.item_id = a.id')
->leftJoin('a.GameCategories gc ON gc.game_id = a.game_id')
->leftJoin('a.User u ON u.id = a.user_id')
->leftJoin('u.Profile ug ON ug.user_id = u.id')
->leftJoin('a.UserRatings ur ON ug.user_id = ur.seller_id')
->where('a.game_server_id = ?', $gs_id)
->andWhere('a.quantity > ?', 0);
switch ($sorter) {
case 'datetime_oldest_to_newist':
$q->orderBy('a.created_at asc');
break;
case 'datetime_newest_to_oldest':
$q->orderBy('a.created_at desc');
break;
case 'price_lowest_to_highest':
$q->orderBy('a.price + 0 ASC');
break;
case 'price_highest_to_lowest':
$q->orderBy('a.price + 0 DESC');
break;
case 'quantity_lowest_to_highest';
$q->orderBy('a.quantity asc');
break;
case 'quantity_highest_to_lowest';
$q->orderBy('a.quantity desc');
break;
case 'quantity_highest_to_lowest';
$q->orderBy('a.quantity desc');
break;
case 'sortby_usernameasc':
$q->orderBy('u.username asc');
break;
case 'sortby_usernamedesc':
$q->orderBy('u.username desc');
break;
case 'sortby_userstatus':
$q->orderBy('ug.user_status asc');
break;
}
return $q;
}
дает мне это сообщение об ошибке
SQLSTATE [42803]: Группировка ошибка: 7 ОШИБКА: колонка "i.id" должен появиться в GROUP BY оговорки или использоваться в агрегатной функции ЛИНИЯ 1 : SELECT i.id AS i__id, i.featured AS i__featured, i.status AS ...
Так что я изменить код, чтобы ...
->andWhere('a.quantity > ?', 0)
->groupBy('a.id');
Тогда я получаю новую ошибку ...
SQLSTATE [42803]: Группировка ошибка: 7 ERROR: столбец "s.id" должен появиться в GROUP BY оговорки или использоваться в агрегатной функции Строка 1: ... AS i__created_at, i.updated_at А.С. i__updated_at , s.id AS s_...
Я остановился здесь, потому что это существенно меняет поведение запроса, и я действительно не знаю, что происходит.
Я не боюсь читать документы, но я даже не знаю с чего начать.
Если вы знаете, в чем проблема, пожалуйста, дайте мне знать. Если вы знаете, где я должен искать документы, сообщите мне об этом.
Благодарим вас заблаговременно.
Скотт
MySQL является исключением, весь другие основными СУБД требует запросов с использованием агрегатных функций (например, AVG) группы всех необобщенными полей, включенными в результатах. Отсутствие группы полностью заставляет меня думать, что объединенные таблицы были в соотношении 1: 1 с «Элементами», или результаты для неагрегированных полей были практически случайными. – Uueerdo