Lite klurigt problem jag har dykt på. Har fyra tabeller med sektioner, typer, nivåer och grupper.
Nu ska jag skriva ut alla sektioner/typer som har en grupp, som är aktiv och inte markerad som borttagen.
Såhär ser min databas ut:
[b]tbl_section[/b]
section_id
section_name
section_removed
[b]tbl_type[/b]
type_id
type_parent ('relaterad' till section_id)
type_name
type_removed
[b]tbl_level[/b]
level_id
level_parent ('relaterad' till type_id)
level_name
level_removed
[b]tbl_group[/b]
group_id ('relaterad' till level_id)
group_parent
group_name
group_active
group_removed
Om [kolumn]_removed är 2 är den borttagen, så den ska vara 1 i alla tabeller.
Listan som jag vill skriva ut ska se ut såhär:
Sektion 1
Typ 1_1
Typ 1_2
Typ 1_3
Sektion 2
Typ 2_1
Typ 2_2
Typ 2_3
Hittills har jag kört en INNER JOIN på tbl_section och tbl_type, men jag måste även ha ett argument att _endast_ visa de sektioner/typer där det finns nivåer och dessa nivåer även innehåller _minst_ en öppen/ej raderad grupp.
Det som avgör om gruppen är aktiv är group_active och den ska vara 1.
Tacksam för hjälp, förstår inte hur jag ska reda det här när det är fyra tabeller att "hålla reda" på.
Tack!
/edit
DBMS är MySQL.
Sökte lite och hittade ett par trådar som jag ska kolla mer på..
SELECT
a.section_id, a.section_name, a.section_name_int,
b.type_id, b.type_parent, b.type_name, b.type_name_int,
c.level_id, c.level_parent,
d.group_id, d.group_parent, d.group_active
FROM tbl_section a
INNER JOIN (
tbl_type b
LEFT OUTER JOIN (
tbl_level c
RIGHT OUTER JOIN tbl_group d
ON d.group_parent = c.level_id
)
ON c.level_parent = b.type_id
)
ON b.type_parent = a.section_id
WHERE d.group_removed = 1
AND group_active = 1
Men det blir inte ett enda rätt, verkar som om endast en typ från tbl_type hittas, vilket är fel.
select
*
from
tbl_section s inner join tbl_type t
on
s.section_id = t.type_parent and
s.section_removed = 1 and
t.type_removed = 1
where
exists (select 1 from tbl_level l
inner join tbl_group g on l.level_id = g.group_parent and
l.level_parent = t.type_id and
l.level_removed = 1 and
g.group_removed = 1 and
g.group_active = 1)
[red][b]Unknown column 't.type_id' in 'on clause'[/b][/red]
SELECT *
FROM tbl_section s INNER JOIN tbl_type t
ON s.section_id = t.type_parent
AND s.section_removed = 1
AND t.type_removed = 1
WHERE EXISTS
(
SELECT 1
FROM tbl_level l INNER JOIN tbl_group g
ON l.level_id = g.group_parent
[b]AND l.level_parent = t.type_id [/b]
AND l.level_removed = 1
AND g.group_removed = 1
AND g.group_active = 1
)
Jag tror att det är den fetstilta raden ovan den gnäller men, men, det är konstigt, för t.type_id _är_ ett fält i den tabellen.
SELECT *
FROM tbl_section s INNER JOIN tbl_type t
ON s.section_id = t.type_parent
AND s.section_removed = 1
AND t.type_removed = 1
WHERE EXISTS
(
SELECT 1
FROM tbl_level l INNER JOIN tbl_group g
ON l.level_id = g.group_parent
WHERE l.level_parent = t.type_id
AND l.level_removed = 1
AND g.group_removed = 1
AND g.group_active = 1
)