За последние 24 часа нас посетили 22735 программистов и 1018 роботов. Сейчас ищут 726 программистов ...

условие по алиасу

Тема в разделе "MySQL", создана пользователем Koc, 11 дек 2009.

  1. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    [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. Тот же резалт.

    Что я делаю не так?
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    COUNT(*) as cnt
     
  3. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    `count`

    ?
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    нееет. Я же сказал:
    Проблема не в том, что слово зарезервированное, я использовал другие варианты, не помогает
     
  5. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Подзапрос разве не такой должен быть?
     
  6. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    просто замечание: не надо делать COUNT(*), делайте COUNT по индексному полю - одному.
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Быстрее типа? Докажи!?
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    [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]
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ну или так
    [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]
     
  10. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Hight
    Не буду доказывать.
    Но вам можно и COUNT(*).

    ps: вообще, существует explain.
    существуют курсы Microsoft по MSSQL. ;)
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    а еще есть шлюхи, встроенные в диван...
     
  12. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Костян
    Ну вероятно, тебе виднее ;)



    all: еще поизучаю свежие мысли базников. Возможно я уже не прав в плане скорости (хотя ранее это было справедливо - зависило от базы).
     
  13. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Simpliest
    Я тоже подумал о двойном-вложенном SELECT. А почему оно так? Не логично как-то

    гы, меня аж передернуло, посмотрел: я в MS SQL или в MySQL отписал.
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Понятия не имею. Почитай стандарты по SQL.

    Если пальцем в небо, то WHERE относится к источнику данных находящемуся в FROM, а таблица ничего не знает о данном поле, поскольку оно определяется только в SELECT.
    Поэтому мы сначала создаем виртуальный набор данных, затем указываем условие к нему.
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    так и есть, так что не в небо ))
     
  16. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В чем конкретно вопрос?
     
  18. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    [strike]как через $select->where() сделать сортировку по полю leaved_by_me[/strike]

    каким образом отрезать от запроса все WHERE, обернуть его в 'SELECT * FROM (" ... ")' и сделать append всех наших WHERE, которые были отрезаны до этого

    сдается мне, что это делается через клонирование объекта
     
  19. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Во-первых, клонировать ничего не надо getPart(ля-ля-ля)
    это для получения частей запроса.

    Второй момент - отрезать where не надо.
    Надо тупо сформировать запрос правильно, причем проще это сделать при помощи Zend_Db_Table_Select

    Ну и сортировка делается не через ->where(), а при помощи ->order()
     
  20. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    сортировку - я ошибся, там фильтр у меня. Буду через getPart получать части и формировать другой запрос. Zend_Db_Table_Select не могу, это маджентовская коллекция, нельзя в нее внедряться так глубоко.

    Спасибо, завтра буду пробовать
     
  21. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    PHP:
    1. <?php
    2.         $db = Zend_Db_Table::getDefaultAdapter();
    3.  
    4.         $subselect = $db->select()->from('user', array('gp' => new Zend_Db_Expr('if(user_role="guest",1,0)')))->assemble();
    5.         $db->select()->from(new Zend_Db_Expr('(' . $subselect . ')'))->where('gp = ?', '1')->query()->fetchAll();
    6.  
     
  22. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  23. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Koc
    В чем вопрос?

    Для подзапроса эти объяснения не действуют.