Итак, ради простоты, у меня есть основная таблица, содержащая два поля: первое - это атрибут, а второе - значение атрибута. Если второе поле установлено для ссылки на значение в другой таблице, оно обозначается в скобках.
Пример:
MASTER_TABLE:
Attr_ID | Attr_Val
--------+-----------
1 | 23(table1) --> 23rd value from `table1`
2 | ...
1 | 42 --> the number 42
1 | 72(table2) --> 72nd value from `table2`
3 | ...
1 | txt --> string "txt"
2 | ...
4 | ...
TABLE 1:
Val_Id | Value
--------+-----------
1 | some_content
2 | ...
. | ...
. | ...
. | ...
23 | some_content
. | ...
Можно ли выполнить одиночный запрос в SQL (без анализа результатов внутри приложения и запроса базы данных), который будет повторяться через master_table и для заданного <attr_id>
получать только те атрибуты, которые ссылаются другие таблицы (, например, 23 (таблица1), 72 (таблица2), ... ), затем анализируют имена таблиц из круглых скобок ( например, таблица1, таблица2, ... ) выполнить запрос, чтобы получить ( 23-е, 72-е, ... ) значение ( например, some_content ) из этой ссылочной таблицы?
Вот что я сделал, и он анализирует Attr_Val для имени таблицы, но я не знаю, как присвоить его строке, а затем выполнить запрос с этой строкой.
PREPARE pstmt FROM
"SELECT * FROM information_schema.tables
WHERE TABLESCHEMA = '<my_db_name>' AND TABLE_NAME=?";
SET @str_tablename =
(SELECT table.tablename FROM
(SELECT @string:=(SELECT <string_column> FROM <table> WHERE ID=<attr_id>) as String,
@loc1:=length(@string)-locate("(", reverse(@string))+2 AS from,
@loc2:=length(@string)-locate(")", reverse(@string))+1-@loc1 AS to,
substr(@string,@loc1, @loc2) AS tablename
) table
); <--this returns 1 rows which is OK
EXECUTE pstmt USING @str_tablename; <--this then returns 0 rows
Есть мысли?