2015-10-22 2 views
-2

У меня есть «организация организации» с полями id и parent. parent ссылается на ту же таблицу (self referential key).Создать представление из собственной ссылочной таблицы mysql и другой таблицы

У меня есть другая таблица с именем user_organization, в которой у меня есть user_id и org_id. org_id привязан к идентификатору в таблице «организация».

Теперь я хочу создать представление, используя эти две таблицы, которые содержат user_id и organization_id. Поскольку член одной организации будет членом всех дочерних организаций, это представление будет содержать дополнительные значения из фактической таблицы user_organization.

Как создать этот вид?

+0

что посмотреть, что нужно? –

+0

Я хочу создать представление, которое содержит user_id и organization_id. – Harikrishnan

+0

u упоминается о 'parent' .. Right ..? Сколько родителей у организации? –

ответ

0

Кажется, что только оператор SQL select невозможен.

https://stackoverflow.com/a/9056945/721597

Но с помощью функций, мне удалось это сделать.

Я создал функцию, называемую IsRelated (идентификатор, родитель) - который говорит, является ли идентификатор связан с родителем (если идентификатор = родитель они связаны между собой):

CREATE FUNCTION `IsRelated`(`GivenID` VARCHAR(10), ParentId VARCHAR(10)) RETURNS boolean 
BEGIN 
    DECLARE related boolean; 
    DECLARE ch INT; 

    SET related = FALSE; 
    IF ParentId = GivenID THEN 
     SET related = TRUE; 
    ELSE 
     SET ch = GivenID; 
     myloop: WHILE ch IS NOT NULL DO 
      SELECT IF(parent_org_id = ch, NULL, parent_org_id) INTO ch FROM 
      (SELECT parent_org_id FROM organizations WHERE id = ch) A; 
      IF ch IS NOT NULL AND ch = ParentId THEN 
       SET related = TRUE; 
       LEAVE myloop; 
      END IF; 
     END WHILE; 
    END IF; 
    RETURN related; 
END 

Тогда я создать представление, как это:

CREATE VIEW `v_all_orgs` AS SELECT o1.id AS org, o2.id AS related_to 
FROM organizations o1 
JOIN organizations o2 ON IsRelated(o1.id, o2.id) 

С помощью этих двух, я создал свой необходимый вид в вопрос:

CREATE VIEW `v_all_user_orgs` AS SELECT DISTINCT user_organizations.user_id, v_all_orgs.org as org_id, user_organizations.created_ts 
FROM user_organizations JOIN v_all_orgs ON v_all_orgs.related_to = user_organizations.org_id OR v_all_orgs.org = user_organizations.org_id 
ORDER BY user_organizations.user_id, v_all_orgs.org 
Смежные вопросы