Как их обьединить?

Тема в разделе "Базы данных", создана пользователем Denis5, 22 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Denis5

    Denis5 Постоялец

    Регистр.:
    2 сен 2008
    Сообщения:
    98
    Симпатии:
    23
    Подскажите как взять игры из таблицы1 и присоединить кол-во комментариев к ним из таблицы2 (MYSQL)
    Таблица с играми (games)
    GID name
    1 aaa
    2 bbb
    3 ccc
    С комментариями к ним ( gcomments)
    GID comment
    1 bla
    1 blabla
    2 blablabla

    Мне нужно получить
    GID name total
    1 aaa 2
    2 bbb 1
    3 ccc 0

    total - кол-во комментариев

    - это мой вариант, ессно он не работает:mad:
     
  2. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    что то вроде этого
    Код:
    SELECT games.GID, games.name, count(*) FROM gcomments, games WHERE gcomments.GID=games.GID GROUP BY gcomments.GID
    
     
    Denis5 нравится это.
  3. Denis5

    Denis5 Постоялец

    Регистр.:
    2 сен 2008
    Сообщения:
    98
    Симпатии:
    23
    Только одна проблема, он выводит только игры, где комментариев больше 0, а мне нужно что бы если нет комментариев - выводил их с 0
     
  4. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    тогда так
    Код:
    SELECT games.GID, games.name, count(gcomments.GID) FROM games LEFT JOIN gcomments  ON games.GID=gcomments.GID GROUP BY gcomments.GID 
    
     
  5. Denis5

    Denis5 Постоялец

    Регистр.:
    2 сен 2008
    Сообщения:
    98
    Симпатии:
    23
    Не, не получается, группирует все игры с 0 комментариями как 1 игру.

    А у меня их больше тысячи.
     
  6. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    3ья итерация ;)
    Код:
    SELECT games.GID, games.name, count(gcomments.GID) FROM post LEFT JOIN gcomments  ON games.GID=gcomments.GID
    GROUP BY games.GID
    
     
  7. abzac

    abzac Создатель

    Регистр.:
    25 окт 2008
    Сообщения:
    24
    Симпатии:
    3
    помню тоже долго мучался с COUNT(*) и возвратом 0.
    Потом в доках нашел
    Я так понял что 1 это из-за LEFT JOIN, который поставляет Null строку.
     
  8. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    235
    Симпатии:
    60
    да , в отличии от CROSS JOIN (аналог того как у меня в первом варианте)
    тогда NULL строки просто отбрасывались.
     
  9. Denis5

    Denis5 Постоялец

    Регистр.:
    2 сен 2008
    Сообщения:
    98
    Симпатии:
    23
    3й вариант ok :yahoo:
     
Статус темы:
Закрыта.