从查询/视图字段中查找基础字段

时间:2013-04-23 13:03:48

标签: php mysql sql innodb

为什么呢? 我试图动态找到外键指向的位置。为此我在information_schema.KEY_COLUMN_USAGE中搜索。它适用于表格,但不适用于视图。

在information_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

它存储在VIEWS表中的方式是:

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 个答案:

答案 0 :(得分:1)

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


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


我不建议制作递归视图。可以肯定的是它会很慢(mysql 必须将临时结果存储在硬盘上,这实际上并没有提高性能)。

即使这不是最佳做法,我也倾向于通过使用一个查询(最多1个子选择)来增加冗余并获取数据。