如何在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查询代码。有可能吗?
答案 0 :(得分:2)
使用PDO
,PDOStatement::fetchAll()
方法以及使用array_column()
函数构建您需要的密钥非常容易实现此操作,如以下步骤所述:
代码可能如下所示:
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);
}