Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помочь с запросом
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Помочь с запросом

Страниц (1): [1]
 

1. Flash_PR - 31 Марта, 2016 - 22:34:05 - перейти к сообщению
Приветствую всех!
В очередной раз обращаюсь за помощью с запросом в mysql.

Есть 2 таблицы company и specialization (компания и специализации компании) связанные один-ко-многим.

Нужно вывести похожие компании, условие похожести одинаковые специализации (все совпадения по специализации).

Т.е. если у целевой компании специализации - специализация1, специализация4, нужно выбрать компании с такими же специализациями (у ищущих компаний может быть больше специализаций (т.е. специализация1, специализация4, специализация5), но никак не меньше.)

Возможно ли такой запрос создать? Чего то даже не понимаю как подступиться...
2. Flash_PR - 01 Апреля, 2016 - 12:11:30 - перейти к сообщению
Сложная задача? Путем штудирования интернета ковыряния родился такой запрос
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t1.*
  3.  
  4. FROM `company` AS t1
  5.  
  6. INNER JOIN `specialization` AS t2
  7. ON t2.company_id = t1.id
  8.  
  9. WHERE t2.specialization IN (1, 6(тут подзапрос на id специализаций целевой компании)) AND (t1.id<>12 (это id целевой компании, исключим его из выборки))
  10.  
  11. GROUP BY t1.id
  12.  
  13. HAVING COUNT(*) >= 2(тут подзапрос на количество специализаций у целевой компании)
  14.  


Прокомментируйте, близко к тому что надо? Вроде срабатывает.

Полный запрос выглядит так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.*
  2.  
  3. FROM `company` AS t1
  4.  
  5. INNER JOIN `specialization` AS t2
  6. ON t2.company_id = t1.id
  7.  
  8. WHERE t2.specialization IN (SELECT specialization FROM `specialization` WHERE company_id = $cid) AND (t1.id <> $cid)
  9.  
  10. GROUP BY t1.id
  11.  
  12. HAVING COUNT(*) >= (SELECT COUNT(id) FROM `specialization` WHERE company_id = $cid)
  13.  
  14. ORDER BY t1.total_rating DESC
  15.  
  16. LIMIT 7
  17.  

 

Powered by ExBB FM 1.0 RC1