Задать вопрос

Как составить правильный sql-запрос (выборка sql — количество записей)?

Как изменить запрос?
Нужно вывести из таблицы все записи + и сколько связей в другой таблице
advert.sity = sity.sity_in
нужно так
Домодедово (3)
Москва (2)
Киев (0)

sity
sity_ru              sity_in
--------------------------------
Домодедово     domodedovo
Москва              moskow
Киев                  kiev

adver 
--------------------------------
id         sity
1         domodedovo
2        moskow


Запрос
SELECT `sity`.`sity_ru`, COUNT(advert.sity) as num 
FROM sity INNER JOIN advert ON advert.sity = sity.sity_in 
GROUP BY sity


Выводит только если в таблице advert есть хоть совпадение.
Если совпадения нет, то 0 не выводит.
Array
(
    [0] => stdClass Object
        (
            [sity_ru] => Домодедово
            [num] => 3
        )

    [1] => stdClass Object
        (
            [sity_ru] => Москва
            [num] => 2
        )

)

Спасибо
  • Вопрос задан
  • 4643 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Примеры разных join

JOIN и INNER JOIN - в MySQL полностью идентичны - вернёт строки, когда есть хотя бы одно совпадение в обеих таблицах.

LEFT JOIN - вернёт строки из левой таблицы, даже если их нет в правой. Т.е. она всегда возвращает строки из таблицы слева.

RIGHT JOIN - полностью аналогичен LEFT JOIN, только он вернёт уже данные из правой таблицы вне зависимости, есть ли у них связь с левой.

FULL JOIN вернет записи при хотя бы одном совпадении в любой из таблиц. Собственно, это комбинация из LEFT JOIN и RIGHT JOIN
Ответ написан
@victimofbrainlessness
city!

select s.sity_ru, ifnull(a.count, 0) from city as s left join
(select advert.sity, count (advert.sity) as count from advert group by sity ) as a
on s.sity_in = a.sity
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `s`.`sity_ru`, IF (`c`.`count` IS NULL, 0, `c`.`count`) AS `num`
  FROM `sity` AS `s`
    LEFT JOIN (
      SELECT `sity`, COUNT(`sity`) AS `count`
        FROM `adver`
        GROUP BY `sity`
    ) AS `c` ON `c`.`sity` = `s`.`sity_in`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы