В моем приложении rails у меня есть три таблицы, чтобы разобраться с отношениями "много-ко-многим" между курсами и категориями.
У меня есть группы категорий, и я хочу разрешить фильтрацию списка курсов по категориям через интерфейс, например:
Местоположение
Тип
Чтобы искать средние типы, близкие или дальние, я думал об использовании:
SELECT distinct courses.*
FROM `courses`
inner join course_categories on
course_categories_courses.course_category_id = course_categories.id
and (
course_categories.id in ('medium')
and course_categories.id in ('near', 'far')
)
но это не работает. Любой, кто может указать мне в правильном направлении, пожалуйста?
Syntactaclly запрошенный вами текст в порядке. В нем есть две неуважительные вещи, как другие отметили
course_categories.id in ('medium')
. Большинство ожидало бы здесь числа, но, возможно, это просто для демонстрационных целей.Причина этого "не работает"
Способы отладки.
Если ошибок нет, и никакая запись не будет возвращена, запустите некоторые запросы в workbench
Select count(*) from course_categories where course_categories.id in ('medium')
Select count(*) from course_categories where course_categories.id in ('near', 'far')
Если вы получили результаты, которые вы хотели получить в Workbench, то это, вероятно, ваш клиентский (Ruby) код, плохая строка соединения, возможно?
Вам нужно присоединиться к обеим таблицам, и вы используете поле id, в котором должны использоваться тип и местоположение (в соответствии с вашим описанием)
SELECT distinct courses.* FROM `courses`
inner course_categories_courses on course_categories_courses.course_category_id = courses.course_category_id
inner join course_categories on
course_categories.id = course_categories_courses.id
where (course_categories.type in ('medium') and course_categories.location in ('near', 'far'))
Обычно вы хотите установить отношения "как", как условия соединения, и значения (литералы) для фильтрации в разделах where
ех. условие соединения - on course_categories_courses.course_category_id = course_categories.id
ех. где предложение - where course_categories.id in ('near', 'far')
Итак, вы можете переписать запрос таким образом. Но более того, как обе эти возможности могут быть истинными?
(course_categories.id in ('medium') and course_categories.id in ('near', 'far'))
Это то, что вы намерены?
location
, а не id