编码为JSON时更改数据库结果的顺序

时间:2015-08-26 作者:Grant

可能有一个非常简单的解决方案,但我就是想不出来。

我正在从wp数据库获取一些信息,绕过wp的内置类,然后将结果作为编码的JSON数据进行回应,如下所示:

$db = new PDO(\'mysql:host=localhost;dbname=dbname\', \'dbusername\', \'dbpassword\');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = \'SELECT user_login AS name, display_name AS tag, user_status AS status
FROM wp_users\';

$query = $db->query($sql);
$i = 1;
$data = array();
while($row = $query->fetch(PDO::FETCH_ASSOC)) {
$row[\'id\'] = $i;
$i++;
$data[] = $row;
}
echo json_encode($data);
这将输出以下内容:

[ 
    {
        "name": "johndoe",
        "tag": "John Doe",
        "status": "0",
        "id": 1
    },
    {
        "name": "janedoe",
        "tag": "Jane Doe",
        "status": "0",
        "id": 2
    }
]
但是我需要更改我正在使用的jquery插件的列表顺序。我需要“id”标记首先呈现如下:

[ 
    {
        "id": 1,
        "name": "johndoe",
        "tag": "John Doe",
        "status": "0"
    },
    {
        "id": 2,
        "name": "janedoe",
        "tag": "Jane Doe",
        "status": "0"
    }
]
谁能给我指一下正确的方向吗?

1 个回复
最合适的回答,由SO网友:webtoure 整理而成

你有很多选择,但我想最简单的就是SQL 类似这样的查询:

SELECT 
  0 AS id, 
  user_login AS name, 
  display_name AS tag, 
  user_status AS status 
FROM wp_users;
您可以看到,现在我们有了所需的订单,您将在何时完成$row[\'id\'] = $i; 分配我们将使用该职位,而不是创建新的key => value.

另一种解决方案利用MySQL 用户变量:

SELECT
  @idx := @idx + 1 AS id,
  user_login AS name, 
  display_name AS tag, 
  user_status AS status
FROM wp_users
CROSS JOIN
  (SELECT @idx := 0) idx;
使用上述解决方案,您无需添加PHP 增量机制,您将获得id 列已按需要格式化。