2016-10-29 4 views
-1

MySqlに複数のテーブルを持つデータベースを持っていて、基本的にエントリの検索を行い、そのエントリを含むすべてのテーブルを返す方法を見つけようとしています。私はテーブル全体だけでなく、TABLE_NAMEだけを必要としません。mySqlのエントリ名からテーブルの親の名前を返します

$query = mysql_query("SELECT TABLE_NAME, TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='maps'") or die(mysql_error()); 

をし、私は私が説明した内容のテーブルを表示する別のページを作りたい:

は現在、私はindex.phpの中でこれを持っています。 あなたは私が何を意味するか理解しているといいですね。

EDIT。 Okey、だから私はこのコードを考え出す。 私は何かしたいのですが、テーブル名ではなくテーブルの各行を検索したいのです。

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='maps' AND TABLE_NAME LIKE "%Search term%" 

EDIT2。

私の.phpファイルには次のものがあります。テストのための 'a'。

$qu = "set @@group_concat_max_len = 1000000; 
set @schema := 'maps'; 
set @search := '%a%'; 

set @sql = (
    select group_concat(concat(
     'select distinct \'', c.TABLE_NAME, '\' as table_name, ', 
     '\'', c.COLUMN_NAME, '\' as column_name ', 
     'from `', @schema, '`.`', c.TABLE_NAME, 
     '` where `', c.COLUMN_NAME, '` like \'', @search , '\'' 
    ) separator ' union all ') 
    from information_schema.`COLUMNS` c 
    where c.TABLE_SCHEMA = @schema 
); 
prepare stmt from @sql; 
execute stmt;" 
$query = mysql_query($qu) or die(mysql_error()); 

   <?php 
        while($row = mysql_fetch_array($query)) 
        { 
         $f1 = $row['TABLE_NAME']; 
         $f2 = $row['TABLE_NAME']; 
       ?> 
       <tr> 
        <td><a href="#"><?php echo $f1 ?></a></td> 
        <td><?php echo $f2 ?></td> 
       </tr> 

あなたはそれはたくさん意味するだろう助けることができれば、あなたはすでにそれを解決してきましたが、私は申し訳ありませんが、あわやそれを実装する方法がわからないので、イムこれにとても新しいです。

答えて

1

用意された文を動的に作成することができます。

set @@group_concat_max_len = 1000000; 
set @schema := 'maps'; 
set @search := '%Search term%'; 

set @sql = (
    select group_concat(concat(
     'select distinct \'', c.TABLE_NAME, '\' as table_name, ', 
     '\'', c.COLUMN_NAME, '\' as column_name ', 
     'from `', @schema, '`.`', c.TABLE_NAME, 
     '` where `', c.COLUMN_NAME, '` like \'', @search , '\'' 
    ) separator ' union all ') 
    from information_schema.`COLUMNS` c 
    where c.TABLE_SCHEMA = @schema 
); 

prepare stmt from @sql; 
execute stmt; 

構築文は、すべてのテーブルのすべての列に「%検索語%」を検索し、検索語を含むすべての列にtable_namecolumn_nameを返します。

また、PHPと同じクエリを構築することができます。

$schema = 'maps'; 
$search = '%Search term%'; 

$query1 = " 
    select TABLE_NAME, COLUMN_NAME 
    from information_schema.`COLUMNS` 
    where c.TABLE_SCHEMA = {$schema} 
"; 

$result1 mysql_query($query1); 
$queryParts = array(); 
while($row = mysql_fetch_assoc($result1)) { 
    $table = $row['TABLE_NAME']; 
    $column = $row['COLUMN_NAME']; 
    $queryPart = " 
     select distinct '{$table}' as table_name, '{$column}' as column_name 
     from `{$schema}`.`{$table}` 
     where `{$column}` like '{$search}' 
    "; 
    $queryParts[] = $queryPart; 
} 
$unionQuery = implode(' union all ', $queryParts); 

$result2 = mysql_query($unionQuery); 
while($row = mysql_fetch_assoc($result2)) { 
    echo $row['table_name'] . '.' . $row['column_name'] . '<br>'; 
} 

注:作成したクエリは非常に非常に遅くなることができます。

注2:遅すぎることがない限り、mysql-extentionからmysqli以上、またはPDOに切り替える必要があります。

+0

ありがとうございます!私はこれを得る。助言がありますか? 分析中に1つのエラーが見つかりました。 認識されないステートメントタイプ。 (近い位置に "準備" 0) SQL-フラガ: は@sql MySQLのSAからのstmtを準備:Dokumentation #1146 - テーブル 'maps.ak' FelixEklö[email protected] –

+0

存在しない - の提案を?私の解決策に何か問題がありますか? –

+0

私はPhysyadminでMysqlで実行しましたが、私にエラーが出ました。それは言う:静的分析: 1つのエラーが分析中に見つかりました。 認識されないステートメントタイプ。 SQL-フラガ(位置0に "準備" に近い): - テーブル「マップDokumentation #1146: は @sql MySQLのSAからのstmtを準備します。ak 'が存在しません –

関連する問題