0

json を出力する前にデータをマージするのに問題があります。目標は、json 内の各オブジェクトに各「投稿」のすべてのデータを含めることです。

以下のコード:

$results = mysql_query("SELECT dfuw_posts.ID, dfuw_posts.post_title,
dfuw_postmeta.meta_key, dfuw_postmeta.post_id, dfuw_postmeta.meta_value FROM
dfuw_posts INNER JOIN dfuw_postmeta ON dfuw_posts.ID = dfuw_postmeta.post_id WHERE
dfuw_posts.post_type = 'poi' AND dfuw_posts.post_status = 'publish' AND 
dfuw_postmeta.meta_key IN ('_poi_loc' ,'_poi_level' ,'_poi_type')");

$pois = array();
while($r = mysql_fetch_assoc($results)){
  $pois[] = $r;
}
echo json_encode($pois);

出力:

[
 {
  "ID": "320",
  "post_title": "Bank",
  "meta_key": "_poi_loc",
  "post_id": "320",
  "meta_value": "70.4845662217412|-84.5123291015625"
 },
 {
  "ID": "320",
  "post_title": "Bank",
  "meta_key": "_poi_level",
  "post_id": "320",
  "meta_value": "easy"
 },
 {
  "ID": "320",
  "post_title": "Bank",
  "meta_key": "_poi_type",
  "post_id": "320",
  "meta_value": "bank"
 },
 {
  "ID": "324",
  "post_title": "A Creature",
  "meta_key": "_poi_type",
  "post_id": "324",
  "meta_value": "mob"
 },
 {
  "ID": "324",
  "post_title": "A Creature",
  "meta_key": "_poi_level",
  "post_id": "324",
  "meta_value": "med"
 },
 {
  "ID": "324",
  "post_title": "A Creature",
  "meta_key": "_poi_loc",
  "post_id": "324",
  "meta_value": "70.4845662217412|-84.5123291015625"
 }
]

各投稿を次のようにバンドルしたいと思います。

{
  "title": "A Creature",
  "location": "70.4845662217412|-84.5123291015625",
  "type": "mob",
  "level": "hard"
 }

これは達成可能ですか?もしそうなら、正しい道に私を送るための提案は大歓迎です!

前もって感謝します!

4

2 に答える 2

0

mysql クエリでカスタム タイトルを指定すると、問題が解決します。

$results = mysql_query("
         SELECT 
            dfuw_posts.ID,
            dfuw_posts.post_title AS title,
            dfuw_postmeta.meta_key,
            dfuw_postmeta.post_id,
            dfuw_postmeta.meta_value AS location
         FROM
            dfuw_posts
         INNER JOIN 
            dfuw_postmeta ON dfuw_posts.ID = dfuw_postmeta.post_id 
         WHERE
            dfuw_posts.post_type = 'poi'
         AND
            dfuw_posts.post_status = 'publish'
         AND 
            dfuw_postmeta.meta_key IN ('_poi_loc' ,'_poi_level' ,'_poi_type')");

$pois = array();
while($r = mysql_fetch_assoc($results)){
  $pois[] = $r;
}
echo json_encode($pois);

出来上がったものを投稿してみてください。

于 2013-01-03T11:46:22.387 に答える
0

以下は、私が最終的に私の問題を解決したものです。

$results = mysql_query("
     SELECT
        dfuw_posts.ID AS pid,
        dfuw_posts.post_title AS title,
        dfuw_postmeta.meta_key AS mkey,
        dfuw_postmeta.post_id AS pmid,
        dfuw_postmeta.meta_value AS mval
     FROM
        dfuw_posts
     INNER JOIN
        dfuw_postmeta ON dfuw_posts.ID = dfuw_postmeta.post_id
     WHERE
        dfuw_posts.post_type = 'poi'
     AND
        dfuw_posts.post_status = 'publish'
     AND
        dfuw_postmeta.meta_key IN ('_poi_loc' ,'_poi_level' ,'_poi_type')");

  $jsary = ["pois" => []];
  $lastPid = 0;
  $currentPid = 0;
  $title = "";
  $ifff = 0;
  $elss = 0;
    while($row = mysql_fetch_array($results))
    {
        $currentPid = $row['pid'];
        $title = $row['title'];

        $cmd = $row['mkey'];
        $cmt = $row['mval'];

        if($lastPid != $currentPid)
        {
                $insAry = [];
                $insAry = ["title"=> $title, $cmd => $cmt];
                array_push($jsary["pois"], $insAry);
                $lastPid = $currentPid;
                $ifff = $ifff + 1;
                $currentPid = 0;
        }
        else
        {
                $ind = 0;
                if($ifff > 0)
                {
                        $ind = $ifff-1;
                }
                $insAry = [$cmd => $cmt];
                $jsary["pois"][$ind][$cmd] = $cmt;
        }
      }

echo json_encode($jsary);

これにより、データが次のように美しく出力されます。

{
 "pois": [
 {
   "title": "Bank",
   "_poi_loc": "70.4845662217412|-84.5123291015625",
   "_poi_level": "easy",
   "_poi_type": "bank"
 },
 {
   "title": "A Creature",
   "_poi_type": "mob",
   "_poi_level": "med",
   "_poi_loc": "70.4845662217412|-84.5123291015625"
 }
]

すべての返信に感謝します。@ジョディ - あなたの投稿は、私が行き着いた場所にたどり着くのに役立ちました。ティ!

于 2013-01-04T08:15:46.703 に答える