Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
ORM. Расширяем count_all() для DISTINCT http://forum.kohanaframework.su/viewtopic.php?f=38&t=746 |
Страница 1 из 2 |
Автор: | AmberLEX [ 09 сен 2013, 01:41 ] |
Заголовок сообщения: | ORM. Расширяем count_all() для DISTINCT |
В общем выходит такая штука, кто как решал или решил задачу? Пример. Есть блог "много-ко-многим". Нужно выбрать все записи этой рубрики и записи из всех её подрубрик. Допустим, получили массив id-шников нужных подрубрик включая текущую $ids = array('13', '14', '22') Т.к. одна запись может быть в нескольких рубриках нужен запрс с DISTINCT Выбираем записи в блоге из нескольких рубрик Код:
Код:
Через билдер запрос строится так Код:
Код:
Код:
Код:
Код:
Может я чего-то упустил или не знаю как это делается для ORM или это можно сделать изящнее. Какие будут предложения? |
Автор: | WinterSilence [ 09 сен 2013, 10:13 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
Код:
а так? |
Автор: | AmberLEX [ 09 сен 2013, 10:28 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
Если вызывать ->count_all() он в любом случае влепит в запрос SELECT DISTINCT COUNT(*) AS `records_found` а в ->find_all() SELECT DISTINCT COUNT(DISTINCT `id`) AS `records_found` Выходит в коде if ($method['name'] == 'select') - unset делается потом выполняется ->select(array(DB::expr('COUNT(*)'), 'records_found')) а потом метод select возвращается $this->_db_pending += $selects; Тут и в билдере то просто ->distinct() не проходит http://kohanaframework.org/3.3/guide/da ... -functions |
Автор: | WinterSilence [ 09 сен 2013, 11:41 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
http://dev.kohanaframework.org/projects ... uery_id=65 посмотри исправления 3.3.1 3.4 может уже пофиксили, если нет в баг реквест заявку и свое решение кинь |
Автор: | AmberLEX [ 09 сен 2013, 12:13 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
Знать бы еще как это делается |
Автор: | AmberLEX [ 09 сен 2013, 12:17 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
В общем вот, может кому пригодится: Код:
|
Автор: | WinterSilence [ 09 сен 2013, 12:34 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
AmberLEX есть такой момент что count(*) работает быстрее count(id) и если запрос без условий он автоматически заменяется на другой еще более быстрый(не вспомню синтаксис сейчас, но можешь в профилере посмотреть) т.ч. лучше сделать эту фишку опциональной |
Автор: | AmberLEX [ 09 сен 2013, 12:41 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
Так у нас тут если нет ->distinct(TRUE) то и будет count(*) А для COUNT(DISTINCT(...)) по любому какое-то поле нужно, так же не напишешь: COUNT(DISTINCT(*)) Просто $this->_primary_key может не быть или еще какие-то нюансы с другой СУБД |
Автор: | AmberLEX [ 09 сен 2013, 12:55 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
Я убрал параметр. Вот как примерно у меня в коде идет: Код:
- без параметра $posts->count_all(FALSE) - и с параметром $posts->count_all(FALSE, TRUE) т.к. в одном случае он нужен, а в другом - нет. Ну или в них считать $count_all = $posts->count_all(...), а pagination оставить за if...else |
Автор: | WinterSilence [ 10 сен 2013, 18:58 ] |
Заголовок сообщения: | Re: ORM. Расширяем count_all() для DISTINCT |
a если использовать group by id ? |
Страница 1 из 2 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |