2013-04-23 82 views
0

为什么? 我想动态地找到外键指向的地方。为此,我在information_schema.KEY_COLUMN_USAGE中进行搜索。它适用于表格,但不适用于视图。从查询/查看字段中查找底层字段

views_schema.VIEWS中引用了视图,view_definition字段公开查询。 我认为这是唯一可以找到视图字段来自何处的信息,对吗?

然后,我会在SELECT和FROM之间搜索我的字段名称。如果它是别名,则获取表字段名称和表名(如果它是别名,则解析该表)。

最后的复杂情况是,视图可以引用另一个视图,那么代码将不得不递归。

让我们举个例子(视图名为vw_mandates_articles):

select ma.*, a.id_articles_unit, a.id_articles_category from mandates_articles ma 
left join articles a on ma.id_article = a.id 

它存储在意见表的方式是:

select `ma`.`id` AS `id`, 
    `ma`.`id_mandate` AS `id_mandate`, 
    `ma`.`id_article` AS `id_article`, 
    `ma`.`unit_price` AS `unit_price`, 
    `ma`.`description` AS `description`, 
    `a`.`id_articles_unit` AS `id_articles_unit`, 
    `a`.`id_articles_category` AS `id_articles_category` 
from (`ste`.`mandates_articles` `ma` 
    left join `ste`.`articles` `a` on((`ma`.`id_article` = `a`.`id`))) 

我的输入是:

  • 视图名称(vw_mandates_articles)
  • 字段名称(id_ articles_category)

预期输出:

  • 字段表(ste.articles)
  • 字段名称(id_articles_category)//可以是与输入相同,但不一定

我不是要求别人为我写,我只是想在挖掘之前验证方法。

有什么想法?好/坏的方法,替代品?

在此先感谢您的指示灯

回答

1

是的。视图仅在information_schema.VIEWS表中的查询中存储了字段。


没有没有比在查询爆炸等更好的办法...


我不会建议进行递归意见。可以肯定的是,它会变慢(mysql 必须将临时结果存储在硬盘上,但这不会改善性能)。

即使这不是最佳实践,我倾向于通过使用单个查询(最大1个子查询)来增加冗余并获取数据。

+0

我不明白我将如何检索基础表/字段与您的代码,你可以详细一点吗? – y0uri 2013-04-23 13:26:38

+0

@ y0uri修复了我的答案,误解了你的问题;) – bwoebi 2013-04-23 13:33:12