sql - Join query issue in MySQL -
i'm storing records in hierarchy. ex.
account -> hospital -> department account -> hospital -> department -> section i'm storing association of records in following manner.
+------+---------------+----------+---------------+-----------+ | id | parenttype | parentid | child type | childid | +------+---------------+----------+---------------+-----------+ | 1| account| 1| hospital| 10| | 2| account| 1| hospital| 20| | 3| hospital| 10| department| 100| | 4| hospital| 10| department| 101| | 5| department| 100| device| 1000| | 6| department| 101| device| 1001| | 6| department| 101| device| 1002| | 1| account| 2| hospital| 30| | 2| account| 2| hospital| 40| | 3| hospital| 30| department| 200| | 4| hospital| 40| department| 201| | 5| department| 200| section| 5000| | 5| department| 200| section| 5001| | 6| section| 5000| device| 2001| | 6| section| 5001| device| 2002| +------+---------------+----------+---------------+-----------+ so, account id 1, follows first hierarchy; whereas account id 2 follows second hierarchy.
i need fetch records given level. ex.
- get devices belonging account id = 1
- get devices belonging department id = 200 , account id = 2 , on.
i can retrieve these queries like:
first query:
select a3.childtype, a3.childid association_lookup a1 -- [got hosp level] join association_lookup a2 on a2.parentid = a1.childid -- [got dept level] join association_lookup a3 on a3.parentid = a2.childid , a3.parenttype = a2.childtype -- [got device level] a1.parentid = 1 , a1.parenttype = 'account' , a3.childtype = 'device' i can make dynamic query self joins equal level difference - 1. i.e. account level = 0, device level = 3; hence 2 joins.
but now, if want associate device against hospital level instead of department level; like:
| xx| hospital| 10| device| 1003| then same query device skipped , devices associated department level returned. how can devices (i.e. under both hospital level , department level).
that horrible way store data.
i suggest restructuring , creating separate tables each entity.
i.e. create table account, create table hospital ...
then can jion properly. else require dynamic iterative selection not built in mysql , needs done external program or hand.
you can write script dynamicall generate table each parenttype , childtype though.
Comments
Post a Comment