2013-04-23 111 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