0

次のSQLを検討してください

SHOW INDEX FROM table1

これにより、table1 のインデックスとして機能する列名が出力されます。

このようなルックアップを別のクエリ内に埋め込むことが可能かどうか疑問に思っています。たとえば、次のようになります。

SELECT (index column names on table1) FROM table1 WHERE ...

このようなクエリで使用するためにこれらの列名を選択する方法はありますか?

4

5 に答える 5

0

PHP をスクリプトに使用できるため、提案されているように、これをいくつかの段階で行うことができます。information_schema次のように、テーブルと準備済みステートメントを使用して、(コマンド ラインなどから) クエリのみを使用してこれを実行することもできます。

SET @COLNAME = (SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE  `TABLE_SCHEMA` = "myDatabaseName" AND `TABLE_NAME` = "myTable" AND `COLUMN_KEY` = "pri");

SET @QRY = CONCAT("SELECT ", @COLNAME , " FROM `myTable`");

PREPARE stmnt FROM @QRY ;
EXECUTE stmnt;

もちろん、これにはクエリ ユーザーが情報スキーマ テーブルとターゲット テーブルへのアクセス許可を持っている必要があります。

これが実際に機能している小さな例です: http://sqlfiddle.com/#!2/9c753/2

PHP でこれを達成するには、他の回答で提案されているように、ステップに分割する必要があります。単一の文字列として渡された場合、少なくとも PDO はこのクエリを処理したくないようです。

ドキュメンテーション

于 2013-07-26T15:21:50.423 に答える
-1

あなたはいくつかのphpヘルプでそれを行うことができます

    $query = "SHOW INDEX FROM YOURTABLE" ;
    $result = mysqli_query($link, $query);//$link is the connection to mysql
    $count = mysqli_num_row(result);
    //check index
    if(empty($count)){
    $Dataid=array();//no indexes
    }elseif($count==1){//One index
      $row = mysqli_fetch_assoc($result);
      $id = $row['Column_name']; 

      $query_select = "SELECT `$id` FROM `YOURTABLE`";
      $result_select = mysqli_query($link, $query_select);
      while($row_select=  mysqli_fetch_assoc($result_select)){
        $Dataid[]=$row_select;
      }
        echo '<pre>';
        print_r($Dataid);
        echo '</pre>';
  }else{//many indexes
    while($row =  mysqli_fetch_array($result)){
        $Index[]=$row['Column_name'];
      }

    //list all indexes, you can call them by their key($Index[0],$Index[1]...)
    echo '<pre>';
    print_r($Index);
    echo '</pre>';

  }
于 2013-07-26T14:40:28.547 に答える