Помогите с довольно простым MySQL Query - PullRequest
1 голос
/ 09 марта 2011

Я пытаюсь получить некоторые данные.

Вот настройка:

У [школы] может быть несколько [семестров]. Только один [семестр] может быть активным на [школу].

Упрощенные поля для таблицы:

  • [школа] имеет 'id', 'title'
  • [school_semester] имеет 'id', 'school_id' (fk), 'semester_id' (fk), ' active ', 'start_date', 'end_date'
  • [семестр] имеет 'id', 'title'

Таблица "school_semester" содержит информацию для конкретной школы / семестра. (StartDate, EndDate, и т.д.).

В любом случае, я просто пытаюсь подтянуть все школы, и в этом запросе я также хочу увидеть текущий активный семестр этой школы.

Вот мой запрос:

SELECT *, `school`.`name` as school_name
FROM (`school`)
LEFT JOIN `school_semester` ON `school`.`id` = `school_semester`.`school_id`
LEFT JOIN `semester` ON `semester`.`id` = `school_semester`.`semester_id`
ORDER BY `school_semester`.`active`

Проблема:

Это работает, если в школе есть активный семестр, но если нет, то в нем будет показан тот, который может быть помечен как неактивный. Если я добавлю утверждение ГДЕ school_semester. active = 1, оно исключает школы, у которых нет активного семестра.

Есть указатели?

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

переместить условие при объединении:

SELECT *, `school`.`name` as school_name
FROM (`school`)
LEFT JOIN `school_semester` ON 
        `school`.`id` = `school_semester`.`school_id` AND
        `school_semester`.`active`
LEFT JOIN `semester` ON `semester`.`id` = `school_semester`.`semester_id`

Таким образом, только активные семестры будут присоединены к результату.

0 голосов
/ 09 марта 2011

Добавьте active=1 как часть вашего условия соединения.

SELECT *, `school`.`name` as school_name
FROM (`school`)
LEFT JOIN `school_semester` ON `school`.`id` = `school_semester`.`school_id`
    AND `school_semester`.`active` = 1
LEFT JOIN `semester` ON `semester`.`id` = `school_semester`.`semester_id`
ORDER BY `school_semester`.`active`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...