выбор из нескольких таблиц mysql

Тема в разделе "Базы данных", создана пользователем sam7i, 30 янв 2008.

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

    sam7i Создатель

    Регистр.:
    15 окт 2007
    Сообщения:
    24
    Симпатии:
    6
    Пытаюсь сделать запрос:

    таблица a (id, name)
    таблица b (userid, rating)

    нужно выбрать 2 поля - имя + сумма рейтинга

    пробовал типа select a.name, sum(SELECT rating FROM b WHERE userid=a.id) as urating from a, b

    но чтото явно не правильно...
     
  2. rootkit

    rootkit Постоялец

    Регистр.:
    4 апр 2007
    Сообщения:
    143
    Симпатии:
    27
    SELECT id, SUM( `rating` )
    FROM test1 a, test2 b
    WHERE a.id = b.userid
    GROUP BY id

    test1 - содержит id, name
    test2 - userid, rating
     
    sam7i нравится это.
  3. edson

    edson Прохожие

    или же с конструкцией join

    SELECT t1.id, SUM(t2.rating)
    FROM a AS t1
    LEFT JOIN a AS t2 ON t1.id=t2.userid
    GROUP BY t1.id
     
  4. Ton

    Ton Постоялец

    Регистр.:
    20 май 2007
    Сообщения:
    55
    Симпатии:
    9
    В этом запросе недочёт. Если у пользователя не будет рейтинга этот пользователь не выводится вообще
     
  5. Volter

    Volter Писатель

    Регистр.:
    24 мар 2008
    Сообщения:
    2
    Симпатии:
    0
    Не понял ниче )
     
  6. pavel012007

    pavel012007

    Регистр.:
    12 мар 2008
    Сообщения:
    210
    Симпатии:
    117
    Внимательно посмотрите пост №3 edison. Конструкция LEFT JOIN вытащит из таблицы "a" все записи, и сопоставит их только с теми записями из "b", у которых a.id содержится в b.userid. Если игрок есть в "a", но отсутствует в "b", у него будет нулевой рейтинг.

    Обращаю так же внимание, что у edison очепятка. Правильно так:

    Код:
    SELECT t1.id, SUM(t2.rating)
    FROM a AS t1
    LEFT JOIN [U][B]b[/B][/U] AS t2 ON t1.id=t2.userid
    GROUP BY t1.id 
    
     
Статус темы:
Закрыта.