[sql]SELECT id, title, (SELECT COUNT(*) FROM `tt_books_books2subjects` WHERE subject_id=id) AS count FROM `tt_subjects` WHERE count > 0 [/sql] Unknown column 'count' in 'where clause пробовал вместо count писать c. Тот же резалт. Что я делаю не так?
нееет. Я же сказал: Проблема не в том, что слово зарезервированное, я использовал другие варианты, не помогает
[sql]SELECT `tt_subjects`.`id`, `title`, COUNT(`tt_books_books2subjects`.`subject_id`) as cnt FROM `tt_subjects` JOIN `tt_books_books2subjects` ON `tt_subjects`.`id`=`tt_books_books2subjects`.`subject_id` FROM `tt_subjects` GROUP BY `tt_books_books2subjects`.`subject_id` HAVING cnt > 0[/sql]
ну или так [sql]SELECT * FROM ( SELECT id, title, (SELECT COUNT(*) FROM `tt_books_books2subjects` WHERE subject_id=id) AS count FROM `tt_subjects` ) as t WHERE t.count > 0[/sql]
Hight Не буду доказывать. Но вам можно и COUNT(*). ps: вообще, существует explain. существуют курсы Microsoft по MSSQL.
Костян Ну вероятно, тебе виднее all: еще поизучаю свежие мысли базников. Возможно я уже не прав в плане скорости (хотя ранее это было справедливо - зависило от базы).
Simpliest Я тоже подумал о двойном-вложенном SELECT. А почему оно так? Не логично как-то гы, меня аж передернуло, посмотрел: я в MS SQL или в MySQL отписал.
Понятия не имею. Почитай стандарты по SQL. Если пальцем в небо, то WHERE относится к источнику данных находящемуся в FROM, а таблица ничего не знает о данном поле, поскольку оно определяется только в SELECT. Поэтому мы сначала создаем виртуальный набор данных, затем указываем условие к нему.
Simpliest, так как ты у нас тут вроде главный по zf то помогай http://pyha.ru/forum/topic/4385.msg93522#msg93522
[strike]как через $select->where() сделать сортировку по полю leaved_by_me[/strike] каким образом отрезать от запроса все WHERE, обернуть его в 'SELECT * FROM (" ... ")' и сделать append всех наших WHERE, которые были отрезаны до этого сдается мне, что это делается через клонирование объекта
Во-первых, клонировать ничего не надо getPart(ля-ля-ля) это для получения частей запроса. Второй момент - отрезать where не надо. Надо тупо сформировать запрос правильно, причем проще это сделать при помощи Zend_Db_Table_Select Ну и сортировка делается не через ->where(), а при помощи ->order()
сортировку - я ошибся, там фильтр у меня. Буду через getPart получать части и формировать другой запрос. Zend_Db_Table_Select не могу, это маджентовская коллекция, нельзя в нее внедряться так глубоко. Спасибо, завтра буду пробовать
PHP: <?php $db = Zend_Db_Table::getDefaultAdapter(); $subselect = $db->select()->from('user', array('gp' => new Zend_Db_Expr('if(user_role="guest",1,0)')))->assemble(); $db->select()->from(new Zend_Db_Expr('(' . $subselect . ')'))->where('gp = ?', '1')->query()->fetchAll();