![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Здравствуйте. Помогите пожалуйста составить запрос. Есть таблицы
Table ds id nazv 1 obj1 2 obj2 Table du id date time d_name id_nazv 1 2010-04-04 23:38:22 Name1 1 2 2010-05-12 14:56:32 Name2 1 3 2011-06-23 14:24:23 Name3 1 4 2012-04-04 05:23:25 Name1 1 Условие Есть входящая переменная id в ней ид объекта из табл ds по которому надо выбирать. Нужно вывести объект из ds, и имена из du которые соотв ds, но нужно что бы не было повторяющихся имён. И если 2 имени одинаковых нужно вывести то у которого максимальная дата(по дате и времени). Я составил запрос, ожнако он без группировки $id = 1;
Выводит: obj1 Name1 name2 name3 Name1 А надо obj1 Name1 name2 name3 И что бы было name 1 у которого максимальная дата из всех name1 Это сообщение отредактировал(а) supercelt - 10.4.2012, 23:58 |
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 2 Всего: 29 |
GROUP BY u.d_name, как и в MySQL должен помочь:
Если не поможет, разбить на два простых запроса, если сложность - не принципиальна. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
должно помочь Раздел вопроса думаю выбран не верно. |
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Выводит ошибку
Warning: pg_query() [function.pg-query]: Query failed: ERROR: argument of HAVING must be type boolean, not type date LINE 1: ...des WHERE u.id_nazv = 1 GROUP BY u.d_name HAVING MAX(u.date... ^ in Z:\home\mozhayka.ru\www\script.php on line 7 Query failed: ERROR: argument of HAVING must be type boolean, not type date LINE 1: ...nazv WHERE u.id_nazv = 1 GROUP BY u.d_name HAVING MAX(u.date... ^ |
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 2 Всего: 29 |
Отсортируйте по id, если даты не обновляются - так быстрее.
date даёт ошибку только в этом примере? Попробуйте экранировать для различия с типом "date". |
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Других примеров у меня нет, так что только в этом и единственном. Поставил having max(u.id). Теперь такая ошибка
Query failed: ERROR: argument of HAVING must be type boolean, not type integer LINE 1: ...nazv WHERE u.id_nazv = 1 GROUP BY u.d_name HAVING MAX(u.id) ... ^ in Ему boolean что ли нужен Это сообщение отредактировал(а) supercelt - 11.4.2012, 19:35 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 2 Всего: 101 |
ясно же сказано - требуется boolean. а max(date) - типа date
|
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Может я и неправильно сделал, но при этом ошибка Query failed: ERROR: column "d.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT d.* AS ds, u.*, MAX(u.date) AS du Я пробовал подставлять в груп поочерёдно поля, вобщем ему надо что бы в груп были все поля из базы. Всвязи с этим рыл мануал и нашёл SET SQL_MODE = 'ONLY_FULL_GROUP_BY' Что бы это значило |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 2 Всего: 101 |
в group by должны быть перечислены все поля, которые не входят в агрегатные функции. раз указано d.*, то придется все поля перечислять
|
|||
|
||||
| supercelt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Прошу прощения, по запарке совсем забыл, нужно вывести не только поля name, нужно вывести все поля. Результат должен содержать
id nazv 1 obj1 id date time d_name id_nazv 2 2010-05-12 14:56:32 Name2 1 3 2011-06-23 14:24:23 Name3 1 4 2012-04-04 05:23:25 Name1 1 А так можно? перечислять все поля, не слишком емко? Нужно перечислить поля после селекта и в груп? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 2 Всего: 101 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |