2016-03-24 3 views
7

私は2,3日からこの問題に苦しんでおり、私は適切な解決策を見つけることができません。SQLテーブルからPHPを介してJSONに

私はPHPを経由して、このデータベース・テーブルからデータを取得したいと思います:

[{ 
"label": "2013-01-07", 
"value": "4" 
}, { 
    "label": "2013-01-06", 
    "value": "65" 
}, { 
    "label": "2013-01-05", 
    "value": "96" 
}] 

私が書いた:PHPで再び

databse table

とは、次のようなJSON出力を持っていますテーブルから情報を取得する関数ですが、それらを正しい順序で配置することはできませんし、おそらくそれを行うためのより良い方法があります。

function getUsersCountOnDate() 
{ 
    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC"); 
    while($row = mysql_fetch_array($result)){ 
    $date[] = $row['date']; 
    } 

    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC"); 
    while($row = mysql_fetch_array($result)){ 
    $count[] = $row['count']; 
    } 

    $merged = array_merge($date, $count); 

    return json_encode($merged); 
} 

私が検索する内容は次のとおりです。 ["2016-03-18"、 "2016-03-13"、 "2016-03-11"、 "2016-03-06"、 "2016-03- 06" "04"、 "6"、 "1"、 "1"、 "1"]

誰でも私を助けてくれますか?

+0

は、関数のいずれかを使用しないでくださいをこれは 'mysql_'で始まります。彼らは時代遅れであり、維持されておらず、PHP 7以降から削除されており、安全ではありません。同等の 'mysqli_'関数や現代の' PDO'データベースクラスを使用してください。 – Nate

答えて

3

まず、データベースクエリにはPDO関数またはmysqli関数を使用します。

array_merge()は、2番目の配列の前に最初の配列を配置します。あなたが実行しているクエリは同一なので $array1 = array('red', 'yellow'); $array2 = array('blue', 'green'); $arrayMerged = array_merge($array1, $array2); $arrayMerged is now array(red,yellow,blue,green);

、あなたはこの行うことができます:たとえば

$result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC"); 
    $i = 0; 
    while($row = mysql_fetch_array($result)){ 
     $date[$i][label] = $row['date']; 
     $date[$i][value] = $row['count']; 
     $i++; 
    } 

$newArray = json_encode($date); 
+0

ヒントありがとうございましたが、今、私はこれを持っています:[{"label": "2016-03-18"}、{"value": "6"}、{"label": "2016-03-13" }、{"value": "1"}、{"label": "2016-03-11"}、{"value": "1"}、{"label": "2016-03-06"}、 {"value": "1"}、{"label": "2016-03-04"}、{"value": "1"}]ラベルと値が一緒である必要がありますそれ? – user2431729

+0

@ user2431729、申し訳ありません更新された回答を参照してください:)今すぐ正常に動作するはずです:)コードをテストしませんでした;)それでもまだ正しくない場合は、再度回答してください;) – Refilon

+0

@ user2431729問題ありません。お役に立てて嬉しいです。 – Refilon

2

は自己文句を言わない、時には十分で、それによって

echo json_encode($merged);

リターンをお試しください。 たとえば、ajax呼び出しでjsonを受信する場合は、それをエコーする必要があります。

これ以外にも、単純な古いmysql関数を使用するのではなく、PDOを見てください。

0

このようにそれを使用してください:

function getUsersCountOnDate() 
{ 
    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC"); 
    while($row = mysql_fetch_array($result)){ 
    $dates[] = $row['date']; 
    } 

    $result = mysql_query("Select FROM_UNIXTIME(regtime, '%Y-%m-%d') as date, count(FROM_UNIXTIME(regtime, '%Y-%m-%d')) as count from users group by FROM_UNIXTIME(regtime, '%Y-%m-%d') order by FROM_UNIXTIME(regtime, '%Y-%m-%d') DESC"); 
    while($row = mysql_fetch_array($result)){ 
    $count[] = $row['count']; 
    } 

    $dates = array("2013-01-07", "2013-01-06", "2013-01-05"); 
    $count = array("4", "65", "96"); 
    $i = 0; 
    foreach ($dates as $date) 
{ 
    $newArray[$i]['label'] = $date; 
    $newArray[$i]['value'] = $count[$i]; 
    $i++; 
} 
///print_r($newArray); 

    return json_encode($newArray); 
} 
関連する問題