所以,为了简单起见,我有一个包含两个字段的主表 - 第一个是属性,第二个是属性值。如果第二个字段设置为引用另一个表中的值,则在括号中表示。
示例:
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(table1),72(table2),... ),然后从括号中解析表名(例如table1,table2,... < / em>)并执行查询以从该引用的表中获取( 23rd,72nd,... )值(例如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
有什么想法吗?
答案 0 :(得分:1)
我喜欢这种方法的纯度,如果被拉下来的话。但我在想你是在制造维修炸弹。有了这样的治疗方法,谁需要生病?
没有人曾经说过一个网站“男人,他们的数据肯定是纯粹的!”他们赞扬了对数据的处理方式。我不建议你把双手绑在背后。我保证你的竞争对手不是。