За последние 24 часа нас посетили 17495 программистов и 1722 робота. Сейчас ищут 1542 программиста ...

Проблема с запросом (объединение)

Тема в разделе "PHP и базы данных", создана пользователем Vitas, 26 июл 2006.

  1. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Помогите с запросом (у меня MySQL):
    Есть 2 таблицы: категории и организации.
    Структуры:
    - Категории -
    id, ...
    - Организации -
    id, cat, ...
    Как выделить категории при этом посчитав, сколько организаций в нее входят?
    SQL знаю на начальном уровне, поэтому писал так:
    SELECT cats.id, COUNT(orgs.*) FROM cats, orgs WHERE orgs.cat = cats.id;
    Но было бы все так просто...
     
  2. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    SELECT cat, COUNT(*) FROM orgs GROUP BY cat
     
  3. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Select cats.id, count(cats.id)
    From cats,
    orgs
    Where cats.id = orgs.id
    Group by cats.id
     
  4. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Хорошо, но такой запрос выделяет только те категории у которых есть организации, а как выделить все категории не зависимо есть организации или нет?
     
  5. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    незнаю, будет ли работать в MySQL, пробуйте

    SELECT id, (SELECT COUNT(*) FROM orgs WHERE cat = cats.id) FROM cats
     
  6. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Выделенное, очень не красиво.
    В Oracle для выше приведенного вопроса есть конструкция:
    Select *
    from table1, table2
    Where table1.id = table2.id(+)
    В MsSql аналог
    Select *
    from table1, table2
    Where table1.id =* table2.id
    В MySql не так силен, но возможно и в нем есть подобная конструкция.
    Курим мануал!
     
  7. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Попробуй
    Код (Text):
    1.  
    2. SELECT a.id, count(a.id) FROM cats AS a LEFT JOIN orgs AS b ON (a.id=b.cat) GROUP BY a.id
     
  8. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    Vah
    ИМХО твой запрос этого не сделает.
     
  9. Vah

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

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    поидее не должен...... различия есть.....
    cats.id = orgs.id и a.id=b.cat (cats.id=orgs.cat) немного различаются.....
     
  10. Vitas

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

    С нами с:
    7 фев 2006
    Сообщения:
    595
    Симпатии:
    0
    Адрес:
    Новосибирск, Академгородок
    Спасибо всем. Буду пробовать.
     
  11. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    только считать надо, наверно, все же организации, а не категории. :)
    Код (Text):
    1. COUNT(b.id)