複数の列を持つテーブルがあり、列名は将来変更できます。スクリプトが名前で列から選択するのではなく (情報が変更される可能性があるため)、列の位置で選択する方法はありますか?
たとえば、表の 2 番目の列を選択したいのですが、簡単にできますか?
これをしない理由は理解できますが、それでもやりたいと思っています。
簡単な解決策?ただSELECT * FROM table
、 $row = でフェッチしてmysql_fetch_row()
から読み込むと$row[1]
、順番に「2列目」の内容になります(0から始まるので)。
もう少し専門的で必要なものだけを選択したい場合は、次のINFORMATION_SCHEMA
ようなクエリを使用してから 2 番目の列名を取得できます。
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'your database schema' AND TABLE_NAME = 'the wanted table name' AND ORDINAL_POSITION = 2;
しかし、本当にこれを正しい方法で行いたい場合は、鼻をどこに置くかを知ってください。テーブル構造が変更され、そのためにコードを調整する必要がある場合は、それで問題ありません。これは、それが行われるべき方法です。「機能している」ままにしておくと、潜在的に間違った情報に依存すると、後でさらに大きな問題が発生する可能性があります。
PHP では、 を使用してクエリを実行できます$res = mysql_fetch_row($query)
。次に、次の方法で 2 番目の列を取得できます$res[1]
。
次の 3 つの例は、MySQL、MySQLi、および PDO を使用して 3 列目を印刷する方法を示しています。
while ($row = mysql_fetch_array($query)) {
print $row[2];
}
$sth->execute();
$sth->bind_result($var1, $var2, $var3);
while ($sth->fetch()) {
print $var3;
}
$sth->execute();
while ($row = $sth->fetchAll()) {
print $row[2];
}
これは非常に悪い考えなので、解決策を提供したくありませんが、可能です。MySQL には、information_schema
クエリ可能な DDL データを格納する という名前のデータベースがあります。あなたが求めているのはCOLUMNS.ORDINAL_POSITION
.
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_NAME = ? AND ORDINAL_POSITION = ?
これにより、n 番目の列の名前が得られ、後続のクエリのフィールド リストで使用できます。これを単一のクエリで行うのは意味がありません。