Всем привет. Немного странный вопрос, но не знаю как сделать( Есть таблица certifications - id - name Есть таблица appointments - id - certification_id Мне нужно посчитать количество назначений по аттестации одним запросом. Чтобы это было, например, (count(appointment.certification_id)) as app_count Таким способом почему-то выводит только не пустые. Там где есть связь
Смысл такой, что мне нужно вывести список, у кого сколько назначений. Если у человека нет назначений, то его предлагать в первую очередь. --- Добавлено --- Группировка по связи. Нет нулевых связей. Нужно null тоже учитывать.
Ну тогда так попробуйте Код (Text): select certifications.id, count(appointments.id) from certifications left join appointments on certifications.id = appointments.certification_id group by certifications.id order by count(appointments.id) desc
@kazadai90, count будет null'ы подсчитывать, т.е. нулевые количества так не получишь. --- Добавлено --- Можно присоединять «таблицу количеств», полученную вложенным запросом на таблице назначений, а потом исправлять null'ы: Код (Text): IFNULL(`count`,0) `count`
Код (Text): create table certifications( id int(11) primary key auto_increment, name text ); insert into certifications(name) values('php5'),('php7'),('mysql'),('git'); create table appointments( id int(11) primary key auto_increment, certification_id integer ); insert into appointments(certification_id) values(2),(2),(3),(3),(3),(3); Код (Text): select certifications.id, count(appointments.id) from certifications left join appointments on certifications.id = appointments.certification_id group by certifications.id order by count(appointments.id) desc
Да, точно. Ты же не все подряд строки подсчитываешь, а с норм. appointments.id. Сорри за доставленные труды
@myks92, можно кэшировать количества в первой таблице и не париться с изобретением/выполнением сложного запроса --- Добавлено --- Про триггеры MySQL почитай.