2011-12-22 4 views
3

私は文字列が存在する場所であればそれを見つけるためのクエリを書いています。同じように動作します
何か:すべてのテーブルとすべての列で文字列を検索する方法は?

foreach(table in database) { 
    foreach(column in table) { 
     // in the end, i need to know, which columns in 
     // which tables that string appears. 
    } 
} 

これは可能ですか?

+3

[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)ですか?現在の要件の背後にある理由を教えてください。 – Bojangles

+1

いずれにせよ、私は* this *問題の解決策に興味があります - 私はそれを間違いなく使用することができます。 *私の理由は、サイト全体がライブになった後にIPアドレスからURLを更新することです(これはコントロールパネルのユーティリティです)。現在、検索用のテーブル/カラムを登録するシステムがありますが、これは簡単です。 –

+0

ありがとう、ジャム、これは私が必要とするものです。私は無限に大きくて厄介なデータベースを選び、値がどこにあるのかを知る必要があります。 –

答えて

2

私はなぜ尋ねますか?正直なところ、実行時に行う必要がない限り、mysqldumpを使用し、テキストエディタを使用して検索します。

実行時にこれを行う必要がある場合は、動的に何かを構築する必要があります。 "show tables"を使用してテーブルのリストを取得できます。これらの各テーブルにshow columnsを使用できます。次に、それぞれの列でテキストを探して何らかのselect文を実行する必要があります(locateを使用するか、またはそのように使用するなど)。

これは、サーバー上でリアルタイムに実行するには、本当に遅いプロセスになるだろう...

+0

おかげさまで、ダンプ・ソリューションはおそらく実行時ではなく、静的に行うべきものですから、おそらく私にとってはうまくいくでしょう。しかし、私は、最も洗練されたヒープを知りたいと思っています。 –

0

はい、これは可能です。しかし、私はあなたが純粋なSQLでそれを行うことはできないと思います。 PHPやシェルスクリプトのようなスクリプト言語でやるほうがいいでしょう。

0

メタデータ(フィールド名など)とデータ(フィールド値など)を同じクエリに含めることはできないため、これは現行のMySQLでは不可能です。

特に

SELECT Field from (DESCRIBE <tablename>) 

ストアドプロシージャであろう

DECLARE flds CURSOR FOR DESCRIBE <tablename> 

として意志

SELECT Field from (SHOW FIELDS FROM <tablename>) 

として、アウトエラーであろう。

これは、INSIDE MYSQLは不可能であると言います。これはPHPとfreindsでは些細なことです。

関連する問題