php - 从查询/ View 字段中查找基础字段

标签 php mysql sql innodb

为什么? 我正在尝试动态查找外键指向的位置。为此,我在 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/

相关文章:

php - session_abort() 的目的

mysql - 计数、最大值和多个子查询 SQL

mysql - codeigniter 将日期应用于字段名称(时间戳)并与年份进行比较

mysql - 将 Postgres 序列重置为下一个 ID

sql - 如何列出所有与 'Art Garfunkel' 合作过的人?

php - 如何根据字段中的 1 或 0 获得不同的结果?

php - 如何获取数据库中列的多个数据值?

sql - 日期时差得到小时:minutes:seconds

SQL Server GUI 在访问大量行和数据时保持卡住

php - 10 月 CMS 使用迁移创建 UUID 默认值触发器