Здравствуйте,
Задача такова:
На рынке недвижимости существуют как объекты-"одиночки" (например, точечная застройка, всего один дом), так и группы объектов (жилой комплекс с кучей корпусов,коттеджный поселок с таунами, участками).
На каждый объект (корпус, таунхаус в поселке, коттедж в поселке и т.д.) в таблице лежит запись.
Для тех объектов, которые входят в группу (ЖК, поселок и т.д.), существует дополнительная родительская запись, и связь между ними строится по parent_id в этой же таблице.
Пример:
id | parent_id | object_type | ...
----------------------------------------------
1 | 0 | common | ...
2 | 0 | newflats | ...
3 | 1 | newflats | ...
4 | 1 | newflats | ...
5 | 0 | cottage | ...
При поиске объектов пользователю выводится выборка объектов из таблицы по заданным условиями (по цене, площади, удаленности и т.д.), исключая родительские карточки, при этом в определенной сортировке, например по цене.
Но т.к. корпусов в одном ЖК может быть 10-20, и все они зачастую одновременно соответствуют заданным критериям, то они могут занимать всю первую страницу выдачи.
Пример текущей выдачи:
SELECT * FROM objects WHERE object_type!='common' AND ....
id | parent_id | object_type | ...
-----------------------------------------------
7 | 0 | newflats | ...
3 | 1 | newflats | ...
4 | 1 | newflats | ...
2 | 0 | newflats | ...
Суть задачи:
Модифицировать запрос так, чтобы в случае наличия у записи родительской записи (parent_id > 0) в выдаче оставалась только одна дочерняя запись на каждого родителя (первая из всех согласно заданной сортировке), а оставшиеся игнорировались.
Т.е. выдача после изменения запроса должна выглядеть как-то так:
id | parent_id | object_type | ...
-----------------------------------------------
7 | 0 | newflats | ...
3 | 1 | newflats | ...
2 | 0 | newflats | ...
Т.е. в выдаче есть 2 объекта, у которых parent_id = 1.
Первый из них в текущей сортировке - с id=3
Значит, надо оставить его, а все последующие с parent_id=1 - игнорировать.
Вот. Вечер, кофе, мешки под глазами. Туплю. Прошу вашей помощи.
Копаю пока группировку по parent_id из подзапроса с сортировкой. Но что-то как-то не выходит каменный цветок