ФорумРазработкаБазы данных → COUNT()

COUNT()

  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 6:54

    есть две таблицы : blog_post, blog_comment

    blog_post
    id | author_id | title | text | created_at |

    blog_comment
    id | blog_post_id | author_name | text | created_at |

    мне необходимо одним запросом получить все блог-посты и кол-во комментов к ним, т.е. прибл вот так :
    id | author_id | title | text | created_at | num_of_comments |

    понимаю что надо сделать лефтджойн, но как в нем уже сделать КАУНТ ?
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 26 сентября 2008 г. 7:07, спустя 13 минут 20 секунд

    SELECT COUNT(`blog_comment`.`id`) 
    FROM `blog_comment`, `blog_post`
    WHERE
    `blog_comment`.`blog_post_id`=`blog_post`.`id` AND
    `blog_post`.`id`=1
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:09, спустя 2 минуты 4 секунды

    храни количество камментов в отдельном поле
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:10, спустя 36 секунд

    NRG, если тебе надо всетаки вытягивать сразу - UNION спасет тебя :)
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:12, спустя 2 минуты


    храни количество камментов в отдельном поле

    и что при каждом добалении/удалении камента мне апдейтить еще эту тейблу ?
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:14, спустя 1 минуту 46 секунд


    SELECT B.*, COUNT(BC.*) AS `comments`
    FROM `blogs` AS B
    LEFT JOIN `blogs_comments` AS BC
    ON BC.`parent_id`=B.`id`
    GROUP BY B.`id`

    вобще group by нужен
    все умрут, а я изумруд
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:16, спустя 2 минуты 39 секунд

    я сначала думал просто сделать так
    SELECT * FROM `sf_blog_post` LEFT JOIN `sf_blog_comment` ON `sf_blog_post`.`id` = `sf_blog_comment`.`sf_blog_post_id`

    а потом уже оттуда все вытягивать…
    md5, твой вариант по сути тот же…
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 26 сентября 2008 г. 7:18, спустя 2 минуты

    и что при каждом добалении/удалении камента мне апдейтить еще эту тейблу ?

    А что в этом плохого? Добавление комментария происходит реже, нежели выборка.
  • md5

    Сообщения: 11948 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:20, спустя 1 минуту 40 секунд


    я сначала думал просто сделать так
    SELECT * FROM `sf_blog_post` LEFT JOIN `sf_blog_comment` ON `sf_blog_post`.`id` = `sf_blog_comment`.`sf_blog_post_id`

    а потом уже оттуда все вытягивать…
    md5, твой вариант по сути тот же…
    ну а в чем проблема?
    все умрут, а я изумруд
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:21, спустя 49 секунд

    sap, я не говорю что это песпредельно плохо, но мне кажется так будет неправильно…
    меня интересует реально ли получить такой результат который я написал в сабже одним запросом….
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:29, спустя 7 минут 50 секунд

    NRG, плюс в том что если ты отображаешь список постов и количество камментов к ним. То ты не затрагиваешь другие таблицы. Реши для себя - чаще пишут или читают.
    adw/0
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:30, спустя 1 минуту

    select p.*, x.num from pages p, (select count(*) as num from comments c where c.page_id=p.id) as x where 1=1

    незнаю насчет мускула у меня в оракле работает
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 26 сентября 2008 г. 7:35, спустя 4 минуты 53 секунды

    Реши для себя - чаще пишут или читают.

    В любом случае, читают чаще. Я считаю, что в первую очередь должна быть оптимизирована выборка. Лучше на один селект инсерт и апдейт, чем каждый раз джойн.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:40, спустя 5 минут 40 секунд

    sap, я написал для того чтобы задумался NRG, а не ты :))
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 26 сентября 2008 г. 7:42, спустя 1 минуту 47 секунд

    adw0rd, спасибо, твой вариант меня устраивает, сделаю так. =)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!