За последние 24 часа нас посетили 15490 программистов и 1607 роботов. Сейчас ищут 926 программистов ...

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

Тема в разделе "MySQL", создана пользователем inline, 9 ноя 2011.

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Есть таблица Names
    Names
    id name
    1 name1
    2 name2
    3 name3

    Есть таблица Relations (таблица связей names с post)
    Relations
    id_names post
    1 2
    1 3
    3 7


    Нужно выбрать для каждого id таблицы Names количество использований в таблице Relations

    Что-то типа select distinct id, [количество упоминаний этого id в relations ] from names
     
  2. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    [sql]SELECT DISTINCT(`names`.`id`), COUNT(`post`.`id`) FROM `names` JOIN `relations` ON `names`.`id` = `relations`.`id_names` JOIN `post` ON `post`.`id` = `relations`.`post` GROUP BY `names`.`id`;[/sql]
    Вроде так, но нужно тестировать...
     
  3. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    SELECT Names.*, COUNT (Relations.post) AS posts FROM Names LEFT JOIN Relations ON Names.id = Relations.id_names GROUP BY Names.id

    Попробуй так.
     
  4. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    пробую так
    [sql]select @alter:=id,select count(alternative) from localhost_relations where alternative=@alter group by alternative from localhost_alternatives group by id[/sql]

    но не проходит
     
  5. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    вроде то что нужно
    счас буду тестировать

    обьясни в чем суть запроса

    спасибо!
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    а что это в конце? from localhost_alternatives group by id
    Где ты видел from после group by ?
     
  7. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    вот так вот работает
    [sql]SELECT localhost_alternatives.id, count(localhost_relations.alternative) AS alter_count FROM localhost_alternatives LEFT JOIN localhost_relations ON localhost_alternatives.id = localhost_relations.alternative GROUP BY localhost_alternatives.id[/sql]
     
  8. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    не правильно запостил запрос

    вот правильно
    точнее так как я пробовал
    [sql] select @alter:=id, (select count(alternative) from localhost_relations where alternative=@alter group by alternative) from localhost_alternatives group by id[/sql]
     
  9. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    суть в джоине и в группировке :)
    Mr. T по сути написал то же самое, только
    1) Соединять сюда posts не нужно, нам ведь сами посты не нужны, только количество
    2) дистинкт не нужен, так как есть group by

    И еще - мой запрос выберет даже тех Names, у которых ни одного поста. Если такие не нужны - используй INNER JOIN вместо LEFT
     
  10. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    тогда почему групировка по localhost_alternatives.id если count по localhost_relations.alternative ?

    [sql]
    SELECT localhost_alternatives.id, count(localhost_relations.alternative) AS alter_count FROM localhost_alternatives LEFT JOIN localhost_relations ON localhost_alternatives.id = localhost_relations.alternative GROUP BY localhost_alternatives.id[/sql]
     
  11. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    правильно ли я понимаю, что после джойна мы получили новую виртуальную таблицу с полями обеих физических таблиц и именно это дало возможность мускулу коунтом подбить количество?
     
  12. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    inline, думаю, нет...
     
  13. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    не могу понять почему count работает даже если групировка по любому другому полю любой из таблиц ?