Связь между таблицами MYSQL
Собственно возник интересный вопросец, ответа на который пока, к сожалению, не нашёл. Имею таблицу организаций в БД, у которой есть поле `org_activities`. В этом чудесном поле хранятся через запятую id видов деятельности. Также имею табличку собственно видов деятельности (`activities`), которая имеет вполне произаическую структуру `act_id`,`act_name` ...
Задача стоит следюущая. Вытаскивая список видов деятельности одним LEFT JOIN посчитать количество организаций, которые занимаются подобной деятельностью.
Оставим в стороне вопрос подсчёта, он не критичен и решаем. проблемы возникли на более раннем этапе - на присоединении одной организации к разным выидам деятельности. Поясню на примере запроса:
SELECT * FROM `activities` a LEFT JOIN `organizations` o ON a.`act_id` IN (o.org_activities) WHERE a`act_state` = 1 ORDER BY a.`act_ord`
Казалось бы всё правильно, но результат показывает обратное. Организация имеет в поле org_activities 2,3,7. У act_id = 2 она присоединяется, у остальных же - нет.
Собственно мне нужна ваша помощь в исправлении запроса. Но буду очень благодарен и за преждложение подойти к задаче с другой стороны.
Ответы (6)
RSSПопробуйте вот это:
sts
integer FIND_IN_SET( str string, strlist string )
Возвращает значение от 1 до ..., в зависимости от позиции строки str среди строк (подстрок) в строке strlist. Строки (подстроки) в strlist разделены ",". Возвращает 0, если str не найдена среди строк в strlist. Возвращает NULL, если один из аргументов NULL.
Примеры:
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
obert-asparyan
id name
1 "Рога и копыта"
2 "Google"
3 "Microsoft"
Деятельности
id name
1 "что-нибудь"
2 "ещё что-то"
3 "третье"
4 "четвёртое"
Organization_actiivities
org_id act_id
1 1
1 2
2 2
2 3
3 4
ergej-moto
Вспомогательную таблицу для вашей связи делайте.
zeroone
Имя org_activites
ООО Вася и КО 2
ООО Вася и КО 3
ООО Вася и КО 7
Печеньки и Плюшки 1
Печеньки и Плюшки 7
............................
Боитесь задвоений в той табличке, введите уникальный id.
otoshek
"Собственно, если кто обратил внимания вопрос был совсем о другом "
Ню-ню.
h-ov
Только зарегистрированные и авторизованные пользователи могут отвечать.