4

mysqlで目的の列名でsql結果のインデックス値を設定するにはどうすればよいですか? 例えば

テーブル名: 国

+-----------+----------------+--------------------+
|   id      |     code       |   name             |
+-----------+----------------+--------------------+
|    1      |       88       |   Bangladesh       |
+-----------+----------------+--------------------+
|    2      |      966       |   Saudi Arabia     |
+-----------+----------------+--------------------+
|    3      |      967       |   Yemen            |
+-----------+----------------+--------------------+
|    4      |      963       |   Syria            |
+-----------+----------------+--------------------+
|    5      |      249       |   Sudan            |
+-----------+----------------+--------------------+

create table クエリは次のとおりです。

CREATE TABLE `country` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` int(20) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

テーブルへのデータの挿入は次のとおりです。

insert  into `country`(`id`,`code`,`name`) values (1,88,'Bangladesh'),
(2,966,'Saudi Arabia'),(3,967,'Yemen'),(4,963,'Syria'),(5,249,'Sudan');

結果は次のように表示されます。

次のクエリを実行すると、目的の結果が次のようになります。

select code, name from country order by code ;

望ましい結果:

[88] => Array
    (
        [code] => 88,
        [name] =>  Bangladesh            
    )

[249] => Array
    (
        [code] => 249,
        [name] =>  Sudan            
    )

[963] => Array
    (
        [code] => 963,
        [name] => Syria
    )

[966] => Array
    (
        [code] => 966,
        [name] => Saudi Arabia
    )

[967] => Array
    (
        [code] => 967,
        [name] => Yemen
    )

直接 SQL クエリによるコードになる配列キーが必要です。出来ますか?

4

3 に答える 3

3

これらの手順で説明されているように、PDO、そのPDOStatement::fetchAll()メソッド、および関数を使用して必要なキーのビルドを使用して、これを行うのは非常に簡単です。array_column()

  1. DSN、ユーザー名、およびパスワードを使用して DB に接続します。
  2. DB にクエリを実行します。
  3. 結果を操作します。

コードは次のようになります。

const DB_DSN = "mysql:host=mysql.hostname.com;dbname=yourdb;port=3306";
const DB_USERNAME = "username";
const DB_PASSWORD = "P4ssW0rd!";

try
{
    $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    $results = $db->query("SELECT code, name FROM country ORDER BY code")->fetchAll(PDO::FETCH_ASSOC);
    $results = array_column($results, null, "code");
}
catch ( PDOException $e )
{
    throw new Exception("An error occurred during the interaction with the database (" . DB_DSN . ").", 0, $e);
}

var_dump($results);

これにより、希望する出力が正確に得られます。

于 2016-12-23T16:34:04.477 に答える