История изменений
Исправление ZuBB, (текущая версия) :
спасибо за ответ
переход на любую другую базу пока не рассматриваю.
Еще можно поковырять код на предмет «откуда растут ноги у сложных запросов?». Если сложные запросы выполняют функцию поиска, это повод переходить на search engines (Solr + rails-sunspot), если бизнес-логика, то выносить её на application layer.
вообще то здесь у меня перемешалось и одно и другое. сам по себе поиск не сложный. лишнюю сложность как раз добавляет «бизнес-логика».
напомню
Нужно одним запросом окромя всех данных с таблицы properties собирать данные (имя и телефоны) всех ее owner`ов
нужность "всех данных с таблицы" (или не всех) как раз определяет поиск и его часть в запросе ничтожно мала
WHERE (operation_type_id IN ('1'))
AND (operation_status_id IN ('1'))
AND (property_type_id IN ('1'))
Сложность в том что вместе с обьектом нужно показать агента с его телефонами который может быть «прицеплен» к нему и owner`-а/-ов с ихними телефонами.
за это отвечает большой кусок
LEFT JOIN
( SELECT GROUP_CONCAT(p.number SEPARATOR ', ') AS agent_phone,
person_id
FROM phones p
GROUP BY p.person_id ) p ON properties.agent_id = p.person_id
JOIN
( SELECT po.property_id,
Group_concat(DISTINCT p2.person SEPARATOR '; ') AS owners
FROM property_owners po
JOIN
( SELECT po.property_id,
Concat_ws(' - ', u2.name, u2.phones) AS person
FROM property_owners po
JOIN
( SELECT u.id,
u.name,
Group_concat(p.number SEPARATOR ', ') AS phones
FROM people u
LEFT JOIN phones p ON u.id = p.person_id
GROUP BY p.person_id ) u2 ON po.owner_id = u2.id ) p2 ON po.property_id = p2.property_id
GROUP BY po.property_id ) p3 ON properties.id = p3.property_id
пока весь этот код отрабатывает достаточно быстро (ActiveRecord: 0.2ms, на очень малом количестве данных). Но чисто визуально он мне не нравится и есть некое чувство что его можна улучшить. но пока не знаю как.
вот такое у меня «месиво» в коде. какие сейчас будут идеи?
Исправление ZuBB, :
спасибо за ответ
переход на любую другую базу пока не рассматриваю.
Еще можно поковырять код на предмет «откуда растут ноги у сложных запросов?». Если сложные запросы выполняют функцию поиска, это повод переходить на search engines (Solr + rails-sunspot), если бизнес-логика, то выносить её на application layer.
вообще то здесь у меня перемешалось и одно и другое. сам по себе поиск не сложный. лишнюю сложность как раз добавляет «бизнес-логика».
напомню
Нужно одним запросом окромя всех данных с таблицы properties собирать данные (имя и телефоны) всех ее owner`ов
нужность "всех данных с таблицы" (или не всех) как раз определяет поиск и его часть в запросе ничтожно мала
WHERE (operation_type_id IN ('1'))
AND (operation_status_id IN ('1'))
AND (property_type_id IN ('1'))
Сложность в том что вместь с обьектом нужно показать агента с его телефонами который может быть «прицеплен» к нему и owner`-а/-ов с ихними телефонами.
за это отвечает большой кусок
LEFT JOIN
( SELECT GROUP_CONCAT(p.number SEPARATOR ', ') AS agent_phone,
person_id
FROM phones p
GROUP BY p.person_id ) p ON properties.agent_id = p.person_id
JOIN
( SELECT po.property_id,
Group_concat(DISTINCT p2.person SEPARATOR '; ') AS owners
FROM property_owners po
JOIN
( SELECT po.property_id,
Concat_ws(' - ', u2.name, u2.phones) AS person
FROM property_owners po
JOIN
( SELECT u.id,
u.name,
Group_concat(p.number SEPARATOR ', ') AS phones
FROM people u
LEFT JOIN phones p ON u.id = p.person_id
GROUP BY p.person_id ) u2 ON po.owner_id = u2.id ) p2 ON po.property_id = p2.property_id
GROUP BY po.property_id ) p3 ON properties.id = p3.property_id
пока весь этот код отрабатывает достаточно быстро (ActiveRecord: 0.2ms, на очень малом количестве данных). Но чисто визуально он мне не нравится и есть некое чувство что его можна улучшить. но пока не знаю как.
вот такое у меня «месиво» в коде. какие сейчас будут идеи?
Исходная версия ZuBB, :
спасибо за ответ
переход на любую другую базу пока не рассматриваю.
ще можно поковырять код на предмет «откуда растут ноги у сложных запросов?». Если сложные запросы выполняют функцию поиска, это повод переходить на search engines (Solr + rails-sunspot), если бизнес-логика, то выносить её на application layer.
вообще то здесь у меня перемешалось и одно и другое. сам по себе поиск не сложный. лишнюю сложность как раз добавляет «бизнес-логика».
напомню
Нужно одним запросом окромя всех данных с таблицы properties собирать данные (имя и телефоны) всех ее owner`ов
нужность "всех данных с таблицы" (или не всех) как раз определяет поиск и его часть в запросе ничтожно мала
WHERE (operation_type_id IN ('1'))
AND (operation_status_id IN ('1'))
AND (property_type_id IN ('1'))
Сложность в том что вместь с обьектом нужно показать агента с его телефонами который может быть «прицеплен» к нему и owner`-а/-ов с ихними телефонами.
за это отвечает большой кусок
LEFT JOIN
( SELECT GROUP_CONCAT(p.number SEPARATOR ', ') AS agent_phone,
person_id
FROM phones p
GROUP BY p.person_id ) p ON properties.agent_id = p.person_id
JOIN
( SELECT po.property_id,
Group_concat(DISTINCT p2.person SEPARATOR '; ') AS owners
FROM property_owners po
JOIN
( SELECT po.property_id,
Concat_ws(' - ', u2.name, u2.phones) AS person
FROM property_owners po
JOIN
( SELECT u.id,
u.name,
Group_concat(p.number SEPARATOR ', ') AS phones
FROM people u
LEFT JOIN phones p ON u.id = p.person_id
GROUP BY p.person_id ) u2 ON po.owner_id = u2.id ) p2 ON po.property_id = p2.property_id
GROUP BY po.property_id ) p3 ON properties.id = p3.property_id
пока весь этот код отрабатывает достаточно быстро (ActiveRecord: 0.2ms, на очень малом количестве данных). Но чисто визуально он мне не нравится и есть некое чувство что его можна улучшить. но пока не знаю как.
вот такое у меня «месиво» в коде. какие сейчас будут идеи?