Приветствую всех!
В очередной раз обращаюсь за помощью с запросом в mysql.
Есть 2 таблицы company и specialization (компания и специализации компании) связанные один-ко-многим.
Нужно вывести похожие компании, условие похожести одинаковые специализации (все совпадения по специализации).
Т.е. если у целевой компании специализации - специализация1, специализация4, нужно выбрать компании с такими же специализациями (у ищущих компаний может быть больше специализаций (т.е. специализация1, специализация4, специализация5), но никак не меньше.)
Возможно ли такой запрос создать? Чего то даже не понимаю как подступиться...
1. Flash_PR - 31 Марта, 2016 - 22:34:05 - перейти к сообщению
2. Flash_PR - 01 Апреля, 2016 - 12:11:30 - перейти к сообщению
Сложная задача? Путем штудирования интернета ковыряния родился такой запрос
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT t1.*
- FROM `company` AS t1
- INNER JOIN `specialization` AS t2
- ON t2.company_id = t1.id
- WHERE t2.specialization IN (1, 6(тут подзапрос на id специализаций целевой компании)) AND (t1.id<>12 (это id целевой компании, исключим его из выборки))
- GROUP BY t1.id
- HAVING COUNT(*) >= 2(тут подзапрос на количество специализаций у целевой компании)
Прокомментируйте, близко к тому что надо? Вроде срабатывает.
Полный запрос выглядит так:
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- SELECT t1.*
- FROM `company` AS t1
- INNER JOIN `specialization` AS t2
- ON t2.company_id = t1.id
- WHERE t2.specialization IN (SELECT specialization FROM `specialization` WHERE company_id = $cid) AND (t1.id <> $cid)
- GROUP BY t1.id
- HAVING COUNT(*) >= (SELECT COUNT(id) FROM `specialization` WHERE company_id = $cid)
- ORDER BY t1.total_rating DESC
- LIMIT 7