如何在mysql中按所需的列名设置sql结果索引值?

时间:2013-11-06 14:38:06

标签: php mysql

如何在mysql中按所需的列名设置sql结果索引值?例如

表名:国家

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

创建表查询如下:

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查询代码。有可能吗?

3 个答案:

答案 0 :(得分:2)

使用PDOPDOStatement::fetchAll()方法以及使用array_column()函数构建您需要的密钥非常容易实现此操作,如以下步骤所述:

  1. 使用DSN,用户名和密码连接到数据库。
  2. 查询数据库。
  3. 操纵结果。
  4. 代码可能如下所示:

    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);
    

    这将为您提供您想要的输出。

答案 1 :(得分:1)

这是一个简单的循环读取结果:

$result = mysqli_query($db,$query);

$array = array();
while ($row = mysqli_fetch_assoc($result)) {
    $array[$row['code']] = $row;
}

答案 2 :(得分:0)

    $servername = "localhost";
    $username = "root";
    $password = "root";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password,'test');


    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }else{

       $query = 'SELECT code, name FROM country ORDER BY code';
       $result = mysqli_query($conn,$query);
       $result = mysqli_fetch_all($result,MYSQLI_ASSOC);           
       $result = array_column($result, null, "code");
        echo "<pre>"; print_r($result);
    }