Здравейте.
Имам 2 таблици като начало:
table1 [
id(int 11) - name(varchar 50) - state(bool)
------------------------------------------------------------------
1 ---------- table5 -------------------- 1
------------------------------------------------------------------
2 ---------- table6 -------------------- 1
------------------------------------------------------------------
3 ---------- table7 -------------------- 0
------------------------------------------------------------------
]
table2 [
-------------------- (table1)
id(int 11) - parrent_id(int 11) - name(varchar 50) - state(bool)
------------------------------------------------------------------------------------
1 ---------- 1 -------------------- somefield1 -------------------- 1
------------------------------------------------------------------------------------
2 ---------- 1 -------------------- examplefield2 ----------------- 1
------------------------------------------------------------------------------------
3 ---------- 3 -------------------- testfield1 -------------------- 0
------------------------------------------------------------------------------------
]
Тези две таблици трябва да изведат следният резултат:
[table1.name][table2.name]
Това спрямо:
table1.id = table2.parrent_id AND table1.state = 1 AND table2.state = 1
Направил съм ето това като заявка:
[sql]
SELECT * FROM `table1` m
LEFT JOIN table2 mL
ON m.id = mL.id
AND m.state = 1
AND mL.state = 1
ORDER BY m.id
[/sql]
До тук добре.
Сега на базата на [table1.name] със [table1.state = 1] трябва да селектирам неопределен брой таблици(в зависимост от това колко резултата от table1 имат state = 1). Тоест имам селектирани да кажем 3 резултата с table.name(с имена) - table5, table6, table7 etc.
Тези table5, table6 и table7 трябва да селетират таблици със съответните имена: table5, table6, table7 и след като ги селектират трябва да се селектират съответните полета, взети от [table2.name] спрямо [table1.id = table2.parrent_id] и [table2.state = 1]
Ето пример как изглежда една такава таблица(table5):
table5 [
-------------------- (table1)
id(int 11) parrent_id(int 11) somefield1(varchar 50) examplefield2(varchar 50)
------------------------------------------------------------------------------------
1 --------------- 1 -------------------- tettetetetet --------------- tet
------------------------------------------------------------------------------------
2 --------------- 1 --------------- etetetetetetet --------------- teet
------------------------------------------------------------------------------------
3 --------------- 3 --------------- asdsadsa --------------- tet
------------------------------------------------------------------------------------
]
Тоест имената от полето table2.name трябва да отговаря на съответното поле в таблица селектирано от резултата на table1.name.
Всичко това ми трябва в една заявка. Пробвах с GROUP_CONCAT(DISTINCT ...) ама нещо се обърква жестоко.
Това със неопределения брой селектиране на таблици най - вероятно ще стане с някакъв цикъл в sql, но си нямам идея, не съм правил подобно нещо.
Не трябва да има въобще намеса на друг език, единствено SQL.
Имам 2 таблици като начало:
table1 [
id(int 11) - name(varchar 50) - state(bool)
------------------------------------------------------------------
1 ---------- table5 -------------------- 1
------------------------------------------------------------------
2 ---------- table6 -------------------- 1
------------------------------------------------------------------
3 ---------- table7 -------------------- 0
------------------------------------------------------------------
]
table2 [
-------------------- (table1)
id(int 11) - parrent_id(int 11) - name(varchar 50) - state(bool)
------------------------------------------------------------------------------------
1 ---------- 1 -------------------- somefield1 -------------------- 1
------------------------------------------------------------------------------------
2 ---------- 1 -------------------- examplefield2 ----------------- 1
------------------------------------------------------------------------------------
3 ---------- 3 -------------------- testfield1 -------------------- 0
------------------------------------------------------------------------------------
]
Тези две таблици трябва да изведат следният резултат:
[table1.name][table2.name]
Това спрямо:
table1.id = table2.parrent_id AND table1.state = 1 AND table2.state = 1
Направил съм ето това като заявка:
[sql]
SELECT * FROM `table1` m
LEFT JOIN table2 mL
ON m.id = mL.id
AND m.state = 1
AND mL.state = 1
ORDER BY m.id
[/sql]
До тук добре.
Сега на базата на [table1.name] със [table1.state = 1] трябва да селектирам неопределен брой таблици(в зависимост от това колко резултата от table1 имат state = 1). Тоест имам селектирани да кажем 3 резултата с table.name(с имена) - table5, table6, table7 etc.
Тези table5, table6 и table7 трябва да селетират таблици със съответните имена: table5, table6, table7 и след като ги селектират трябва да се селектират съответните полета, взети от [table2.name] спрямо [table1.id = table2.parrent_id] и [table2.state = 1]
Ето пример как изглежда една такава таблица(table5):
table5 [
-------------------- (table1)
id(int 11) parrent_id(int 11) somefield1(varchar 50) examplefield2(varchar 50)
------------------------------------------------------------------------------------
1 --------------- 1 -------------------- tettetetetet --------------- tet
------------------------------------------------------------------------------------
2 --------------- 1 --------------- etetetetetetet --------------- teet
------------------------------------------------------------------------------------
3 --------------- 3 --------------- asdsadsa --------------- tet
------------------------------------------------------------------------------------
]
Тоест имената от полето table2.name трябва да отговаря на съответното поле в таблица селектирано от резултата на table1.name.
Всичко това ми трябва в една заявка. Пробвах с GROUP_CONCAT(DISTINCT ...) ама нещо се обърква жестоко.
Това със неопределения брой селектиране на таблици най - вероятно ще стане с някакъв цикъл в sql, но си нямам идея, не съм правил подобно нещо.
Не трябва да има въобще намеса на друг език, единствено SQL.