0

为什么?我正在尝试动态查找外键指向的位置。为此,我在 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)//可以与输入相同但不一定

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

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

提前感谢您的灯

4

1 回答 1

1

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


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


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

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

于 2013-04-23T13:12:04.617 回答