php - 通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序

标签 php mysql arrays json wordpress

为了构建我的 Android 应用程序,我目前正在将我的 Wordpress SQL 数据库转换为 JSON。

这是我当前正在使用的脚本 found on Stack Overflow here :

    <?php

$host = "localhost";
$user = "*********";
$password = "********";
$db = "********";

$sql = "select * FROM wp_postmeta WHERE meta_key = 'event_start_date' OR meta_key = 'event_end_date' OR meta_key = 'event_start_time' OR meta_key = 'event_end_time' OR meta_key = 'event_phone' OR meta_key = 'post_views_count' OR meta_key = 'event_address_longitude' OR meta_key = 'event_address_latitude' OR meta_key = 'event_address_zip' OR meta_key = 'event_address_address' ORDER BY post_id ASC";
$con = mysqli_connect($host,$user,$password,$db);

$result = mysqli_query($con,$sql);
$response = array();


while($row = mysqli_fetch_array($result)){
    array_push($response,array('post_id'=>$row[1],'meta_tag'=>$row[2],'meta_Value'=>$row[3]));

}


echo json_encode(array("server_response"=>$response));
mysqli_close($con);

?>

我得到的结果的一小部分是这样的:

{
    "post_id": "3726",
    "meta_tag": "event_start_date",
    "meta_Value": "11\/25\/2015"
}, {
    "post_id": "3726",
    "meta_tag": "event_start_time",
    "meta_Value": "08:00 PM"
}, {
    "post_id": "3726",
    "meta_tag": "event_end_date",
    "meta_Value": "11\/25\/2015"
}, {
    "post_id": "3726",
    "meta_tag": "event_end_time",
    "meta_Value": "11:00 PM"
}, {
    "post_id": "3726",
    "meta_tag": "event_address_address",
    "meta_Value": "Tippler On The Roof 276, 100 FEET ROAD, INDIRANAGAR"
}, {
    "post_id": "3726",
    "meta_tag": "event_address_zip",
    "meta_Value": "560038"
}, {
    "post_id": "3726",
    "meta_tag": "event_address_latitude",
    "meta_Value": "12.9782859"
}, {
    "post_id": "3726",
    "meta_tag": "event_address_longitude",
    "meta_Value": "77.63875669999993"
}, {
    "post_id": "3726",
    "meta_tag": "post_views_count",
    "meta_Value": "65"
}, {
    "post_id": "3727",
    "meta_tag": "event_address_address",
    "meta_Value": "F BAR & KITCHEN 18, ALI ASKAR ROAD OFF CUNNINGHAM ROAD"
}, {
    "post_id": "3727",
    "meta_tag": "event_address_zip",
    "meta_Value": "560001"
}, {
    "post_id": "3727",
    "meta_tag": "event_phone",
    "meta_Value": "9731110594"
}, {
    "post_id": "3727",
    "meta_tag": "event_address_latitude",
    "meta_Value": "12.9887093"
}, {
    "post_id": "3727",
    "meta_tag": "event_address_longitude",
    "meta_Value": "77.5937212"
}, {
    "post_id": "3727",
    "meta_tag": "post_views_count",
    "meta_Value": "54"
}, {
    "post_id": "3729",
    "meta_tag": "event_start_date",
    "meta_Value": "11\/25\/2015"
}, {
    "post_id": "3729",
    "meta_tag": "event_start_time",
    "meta_Value": "08:00 PM"
}, {
    "post_id": "3729",
    "meta_tag": "event_end_date",
    "meta_Value": "11\/25\/2015"
}, {
    "post_id": "3729",
    "meta_tag": "event_end_time",
    "meta_Value": "11:30 PM"
}, {
    "post_id": "3729",
    "meta_tag": "event_address_address",
    "meta_Value": "FUNKY VILLA 4TH FLOOR, NGV COMMERCIAL COMPLEX, KHB GAMES VILLAGE"
}, {
    "post_id": "3729",
    "meta_tag": "event_address_zip",
    "meta_Value": "560047"
}, {
    "post_id": "3729",
    "meta_tag": "post_views_count",
    "meta_Value": "77"
}, {
    "post_id": "3731",
    "meta_tag": "event_start_date",
    "meta_Value": "12\/19\/2015"
}, {
    "post_id": "3731",
    "meta_tag": "event_start_time",
    "meta_Value": "09:00 PM"

但这不是我想要的结果显示方式。因此,在我的 php 脚本中获取结果数组后,我想对其中的值本身进行排序,然后以 JSON 格式将其传递到我的应用程序。

如您所见,现在每个片段都包含 3 个值:post_id、meta_tag 和 meta_value。因此,我想用它做两件事:

  1. 将所有具有共同 post_id 的小数组合并为一个。
  2. 然后,现在出现的 3 个值并不是我所需要的。实际上meta_tag显示的值应该取代meta_tag,并且meta_value的值应该成为它的值。

为了避免混淆并正确看待事物,我希望上述结果的显示方式如下:

{
        "post_id": "3726",
        "event_start_date": "11\/25\/2015",
        "event_start_time": "08:00 PM"
        "event_end_date": "11\/25\/2015"
        "event_end_time": "11:00 PM"
        "event_address_address": "Tippler On The Roof 276, 100 FEET ROAD, INDIRANAGAR"
        "event_address_zip": "560038"
        "event_address_latitude": "12.9782859"
        "event_address_longitude": "77.63875669999993"
        "post_views_count": "65"
        }

我已经展示了一个 post_id 的输出 Json 示例。所有职位都必须这样做。我需要一个循环解决方案,可用于覆盖数据库中的所有帖子(其中有数百个)。

最佳答案

您需要合并表 wp_posts 和 wp_postmeta:

select p.ID as post_id p,
(select meta_value from wp_postmeta where meta_tag='event_start_date' && post_id=p.ID) as event_start_date,
(select meta_value from wp_postmeta where meta_tag='event_start_time' && post_id=p.ID) as event_start_time,

...

from wp_posts

说明:

您尝试检索的是每个帖子的数据集,因此您的主要查询是 wp_posts 而不是 wp_postmeta。然后,您希望将 wp_postmeta 中各个行的数据添加到该行,因此 wp_postmeta 是您的辅助查询。

关于php - 通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965485/

相关文章:

database - MySQL 查询 : Displaying counts for many groups with many records

mysql - 如何在mysql中使用if else子查询

php - 如何允许 www-data 用户使用 nginx 执行 bash 脚本

php - apache mod_rewrite 中的奇怪行为

mysql - Ruby Data_Mapper 资源无法保存 - 需要不同的数据类型

Java:设置预定长度的数组作为方法参数?

javascript - 通过 &lt;style&gt; 在 CSS 中使用 JavaScript 函数

c++ - 在循环内使用 cin 进行循环,从而将不同的 char* 存储在一个数组中 (c++)

php - 用PHP抓取YouTube上的视频

php - 如何在不使用模式前缀的情况下访问模式中的表 (Postgres + PHP)?