я имею в поле категории, которое имеет csv, например, 1,3,5, и я хочу сопоставлять другие категории в таблице, скажем, (1,2,3,4), на данный момент он использует claase, но это не работает когда есть несколько категорий.
Job.jobcategory_alias in (SELECT p_alias FROM job_categories WHERE p_id = 10225 or p_parent_id = 10225 or p_id = 10237 or p_parent_id = 10237)
он будет работать, если jobcategory_alias имеет только одно значение, подобное 1, но терпит неудачу, если оно имеет два значения, например, 1,2 разделенные запятой.
Я не могу изменить структуру базы данных.
Как я могу написать запрос для соответствия нескольким категориям?
Используйте find_in_set()
:
find_in_set(Job.jobcategory_alias,
(SELECT p_alias
FROM job_categories
WHERE p_id IN (10225, 10237) OR p_parent_id IN (10225, 10237)
)
) > 0
Это предполагает, что подзапрос возвращает не более одной строки.