次のSQLを検討してください
SHOW INDEX FROM table1
これにより、table1 のインデックスとして機能する列名が出力されます。
このようなルックアップを別のクエリ内に埋め込むことが可能かどうか疑問に思っています。たとえば、次のようになります。
SELECT (index column names on table1) FROM table1 WHERE ...
このようなクエリで使用するためにこれらの列名を選択する方法はありますか?
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 はこのクエリを処理したくないようです。
ドキュメンテーション
あなたはいくつかの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>';
}