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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помочь с запросом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Flash_PR
Отправлено: 31 Марта, 2016 - 22:34:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Приветствую всех!
В очередной раз обращаюсь за помощью с запросом в mysql.

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

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

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

Возможно ли такой запрос создать? Чего то даже не понимаю как подступиться...

(Отредактировано автором: 31 Марта, 2016 - 22:45:22)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Flash_PR
Отправлено: 01 Апреля, 2016 - 12:11:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Сложная задача? Путем штудирования интернета ковыряния родился такой запрос
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.  

(Отредактировано автором: 01 Апреля, 2016 - 13:35:52)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB