为什么? 我正在尝试动态查找外键指向的位置。为此,我在 information_schema.KEY_COLUMN_USAGE 中进行搜索。它适用于表,但不适用于 View 。
View 在 information_schema.VIEWS 中引用,view_definition 字段公开查询。 我认为这是我能找到有关 View 字段来源的信息的唯一地方,对吗?
然后,我将在 SELECT 和 FROM 之间搜索我的字段名称。如果是别名,则获取表字段名和表名(如果是别名则解析表)。
最后一个复杂的问题是, View 可以引用另一个 View ,那么代码就必须是递归的。
我们举个例子( View 名称是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`)))
我的输入是:
- View 名称 (vw_mandates_articles)
- 字段名称 (id_articles_category)
预期输出:
- 字段表 (ste.articles)
- 字段名称 (id_articles_category)//可以与输入相同,但不一定
我并不是要求别人为我编写它,我只是想在挖掘之前验证该方法。
有什么想法吗?好/坏方法,替代方案?
提前感谢您的灯光
最佳答案
是的。 View 仅具有存储在 information_schema.VIEWS 表中的查询中的字段。
<小时/>不,没有比在查询中爆炸等更好的方法了...
<小时/>我不建议进行递归 View 。可以肯定的是,它会很慢(mysql 将必须将临时结果存储在硬盘上,这实际上不会提高性能)。
即使这不是最佳实践,我也倾向于增加冗余并通过使用单个查询(最多 1 个子选择)来获取数据。
关于php - 从查询/ View 字段中查找基础字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16170088/