За последние 24 часа нас посетили 19105 программистов и 1640 роботов. Сейчас ищут 933 программиста ...

Вывести имена пользователей и количество оставленх сообщений

Тема в разделе "MySQL", создана пользователем van, 29 дек 2013.

  1. van

    van Новичок

    С нами с:
    29 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Привет
    Помогите плиз разобраться с проблемой...

    Имеется 2 таблицы user_name, comment...

    в первой столбцы id и name
    Во второй id, user_id, и text

    Задача состоит в том что бы посчитать сколько каждый человек оставил комментариев...
    И вывести имя и это количество...

    Пример:
    greg | 15
    meg | 5
    Max | 4

    И всё это надо сделать в одним запросом...

    Составил
    Код (Text):
    1.  
    2. SELECT user_name.`name`, COUNT(comment.`user_id`) FROM user_name, comment WHERE user_name.`id`='4' AND  comment.`user_id`='4';
    Но выводит только одну строку с результатом а надо весь список...
     
  2. semnt

    semnt Новичок

    С нами с:
    25 дек 2013
    Сообщения:
    93
    Симпатии:
    0
    Re: Вывести имена пользователей и количество оставленх сообщ

    Первый вариант - вложенным запросом (дольше, но менее затратно по ресурсам):
    Код (Text):
    1. SELECT
    2.     `id`,
    3.     `name`,
    4.     (
    5.         SELECT COUNT(*)
    6.         FROM  `comment`
    7.         WHERE `comment`.`user_id` = `user_name`.`id`
    8.     ) as `count_comments`
    9. FROM
    10.     `user_name`;
    Второй вариант - группировкой (быстрее, но нужно много ресурсов):
    Код (Text):
    1. SELECT
    2.     `user_name`.`id`,
    3.     `user_name`.`name`,
    4.     COUNT(`comment`.`user_id`) as `count_comments`
    5. FROM
    6.     `user_name`
    7. LEFT JOIN
    8.     `comment` ON `comment`.`user_id` = `user_name`.`id`
    9. GROUP BY
    10.     `user_name`.`id`;
     
  3. van

    van Новичок

    С нами с:
    29 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Re: Вывести имена пользователей и количество оставленх сообщ

    Спасибо!))