2015-08-29 8 views
3

У меня есть сценарий обмена музыкой, и я пытаюсь создать JSON из моей базы данных MySQL, я пытаюсь создать определенную структуру и не может показаться, чтобы понять этоMysql в формате JSON с помощью PHP

Heres мой код

<?php 
    //Create Database connection 
    $db = mysql_connect("localhost","-Username-","-Password-"); 
    if (!$db) { 
     die('Could not connect to db: ' . mysql_error()); 
    } 

    //Select the Database 
    mysql_select_db("-Database-",$db); 


{ 

    $result = mysql_query("SELECT * FROM users ORDER BY username ASC"); 
    $json_response = array(); //Create an array 
    while ($row = mysql_fetch_array($result)) 
    { 
     $row_array = array(); 
     $row_array['idu'] = $row['idu']; 
     $row_array['username'] = $row['username']; 
     $row_array['first_name'] = $row['first_name']; 
     $row_array['last_name'] = $row['last_name']; 
     $row_array['country'] = $row['country']; 
     $row_array['image'] = $row['image']; 
     $row_array['cover'] = $row['cover']; 
     $row_array['description'] = $row['description']; 
     $row_array['playlists'] = array(); 
     $row_array['tracks'] = array(); 
     $plid = $row['idu']; 

     $option_qry = mysql_query("SELECT * FROM playlists where playlists.by=$plid"); 
     while ($opt_fet = mysql_fetch_array($option_qry)) 
     { 
      $row_array['playlists'][] = array(
       'id' => $opt_fet['id'], 
       'name' => $opt_fet['name'], 
       'by' => $opt_fet['by'], 
      ); 


     } 
     array_push($json_response, $row_array); //push the values in the array 


     //tracks 


     $option_qry = mysql_query("SELECT * FROM tracks where tracks.uid=$plid"); 
     while ($opt_fet = mysql_fetch_array($option_qry)) 
     { 
      $row_array['tracks'][] = array(
       'id' => $opt_fet['id'], 
       'title' => $opt_fet['title'], 
       'name' => $opt_fet['name'], 
       'art' => $opt_fet['art'], 
       'likes' => $opt_fet['likes'], 
       'downloads' => $opt_fet['downloads'], 
       'plays' => $opt_fet['views'], 
       'uid' => $opt_fet['uid'], 



      ); 


     } 
     array_push($json_response, $row_array); //push the values in the array 

    } 
    echo json_encode($json_response,JSON_PRETTY_PRINT); 
} 
?> 

пользователи Таблица:

id username last_name first_name country etc... 
1 username1 Mynce  George  USA  etc... 
2 username2 Jenkins Fred  USA  etc... 
3 username3 Walberg Mark  USA  etc... 
4 username4 Smith  Will  USA  etc... 

плейлистам Таблица:

id by name 
1 4 My playlists 
2 3 Popular Songs 

playlistentries Таблица:

id playlists track 
12 1   13 
13 1   23 
14 1   3 
15 1   17 
16 1   9 
12 2   14 
13 2   24 
14 2   4 
15 2   18 
16 2   10 

дорожки Таблица:

id title  name  art  likes downloads views 
1 song_title song1.mp3 art1.png 13  8   55 
2 song_title song2.mp3 art2.png 12  10   31 
3 song_title song3.mp3 art3.png 7  32   50 
4 song_title song4.mp3 art4.png 22  11   1 
5 song_title song5.mp3 art5.png 1  28   2 

С моим текущим кодом, я получаю этот результат JSON:

{ 
    "idu": "2", 
    "username": "chicagochurch", 
    "first_name": "Chicago Christian Center", 
    "last_name": "", 
    "country": "United States", 
    "image": "839674815_146358938_1746691162.png", 
    "cover": "173157219_1187606488_302826016.jpg", 
    "description": "This is the official Chicago Church Music page.", 
    "playlists": [ 
     { 
      "id": "4", 
      "name": "We Give You Praise", 
      "by": "2" 
     } 
    ], 
    "tracks": [ 
     { 
      "id": "29", 
      "title": "01 We Give You Praise", 
      "name": "1667450919_35711384_1898671201.mp3", 
      "art": "97020012_1272964020_1490042512.png", 
      "likes": "1", 
      "downloads": "1", 
      "plays": "4", 
      "uid": "2" 
     }, 
     { 
      "id": "30", 
      "title": "02 Luvudees", 
      "name": "1361859314_884859216_209326964.mp3", 
      "art": "1591964284_1156840179_1721104535.png", 
      "likes": "0", 
      "downloads": "1", 
      "plays": "3", 
      "uid": "2" 
     }, 
     { 
      "id": "31", 
      "title": "03 Mugo Del", 
      "name": "1366849477_130736941_1367659635.mp3", 
      "art": "1181156184_556035815_1698596436.png", 
      "likes": "0", 
      "downloads": "1", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "32", 
      "title": "04 San Amensa", 
      "name": "40925819_971317614_1732715256.mp3", 
      "art": "837149755_251638008_1945445596.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "1", 
      "uid": "2" 
     }, 
     { 
      "id": "33", 
      "title": "05 One True God", 
      "name": "1201163785_1107025307_1077346045.mp3", 
      "art": "713651840_1636034922_1247445482.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "34", 
      "title": "06 Mugo Anav", 
      "name": "173569477_686122962_117960391.mp3", 
      "art": "1432749408_578109445_1094716795.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "35", 
      "title": "07 Hallelujah", 
      "name": "133051077_70993845_552471086.mp3", 
      "art": "2040610215_1811023913_383444282.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "36", 
      "title": "08 Sheppard", 
      "name": "984429058_1532916377_1375134853.mp3", 
      "art": "1153269141_143559426_997684622.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "37", 
      "title": "09 I Love you Lord", 
      "name": "794115968_1411878888_673035094.mp3", 
      "art": "1692460167_1433248811_682631716.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "38", 
      "title": "10 Jesus In The Center", 
      "name": "202390322_461558278_1271927584.mp3", 
      "art": "1048499380_362527600_4599069.png", 
      "likes": "0", 
      "downloads": "1", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "39", 
      "title": "11 Mugo Luvudeemos", 
      "name": "274506373_302381815_356651583.mp3", 
      "art": "1229728795_739090349_686501748.png", 
      "likes": "0", 
      "downloads": "1", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "40", 
      "title": "12 Onday Chedo Kud", 
      "name": "378498031_1470949688_1199351944.mp3", 
      "art": "308978665_1074723934_419931699.png", 
      "likes": "0", 
      "downloads": "0", 
      "plays": "0", 
      "uid": "2" 
     }, 
     { 
      "id": "41", 
      "title": "13 The Word", 
      "name": "956461611_287666310_43661088.mp3", 
      "art": "1584112229_240532531_977129308.png", 
      "likes": "1", 
      "downloads": "4", 
      "plays": "0", 
      "uid": "2" 
     } 
    ] 
} 

, что я на самом деле хочу, чтобы получить этот вид Структура:

{ 
    "idu": "2", 
    "username": "chicagochurch", 
    "first_name": "Chicago Christian Center", 
    "last_name": "", 
    "country": "United States", 
    "image": "839674815_146358938_1746691162.png", 
    "cover": "173157219_1187606488_302826016.jpg", 
    "description": "This is the official Chicago Church Music page.", 
    "playlists": [ 
     { 
      "id": "4", 
      "name": "We Give You Praise", 
      "by": "2", 
      "tracks": [ 
       { 
        "id": "29", 
        "title": "01 We Give You Praise", 
        "name": "1667450919_35711384_1898671201.mp3", 
        "art": "97020012_1272964020_1490042512.png", 
        "likes": "1", 
        "downloads": "1", 
        "plays": "4", 
        "uid": "2" 
       }, 
       { 
        "id": "30", 
        "title": "02 Luvudees", 
        "name": "1361859314_884859216_209326964.mp3", 
        "art": "1591964284_1156840179_1721104535.png", 
        "likes": "0", 
        "downloads": "1", 
        "plays": "3", 
        "uid": "2" 
       }, 
       { 
        "id": "31", 
        "title": "03 Mugo Del", 
        "name": "1366849477_130736941_1367659635.mp3", 
        "art": "1181156184_556035815_1698596436.png", 
        "likes": "0", 
        "downloads": "1", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "32", 
        "title": "04 San Amensa", 
        "name": "40925819_971317614_1732715256.mp3", 
        "art": "837149755_251638008_1945445596.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "1", 
        "uid": "2" 
       }, 
       { 
        "id": "33", 
        "title": "05 One True God", 
        "name": "1201163785_1107025307_1077346045.mp3", 
        "art": "713651840_1636034922_1247445482.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "34", 
        "title": "06 Mugo Anav", 
        "name": "173569477_686122962_117960391.mp3", 
        "art": "1432749408_578109445_1094716795.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "35", 
        "title": "07 Hallelujah", 
        "name": "133051077_70993845_552471086.mp3", 
        "art": "2040610215_1811023913_383444282.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "36", 
        "title": "08 Sheppard", 
        "name": "984429058_1532916377_1375134853.mp3", 
        "art": "1153269141_143559426_997684622.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "37", 
        "title": "09 I Love you Lord", 
        "name": "794115968_1411878888_673035094.mp3", 
        "art": "1692460167_1433248811_682631716.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "38", 
        "title": "10 Jesus In The Center", 
        "name": "202390322_461558278_1271927584.mp3", 
        "art": "1048499380_362527600_4599069.png", 
        "likes": "0", 
        "downloads": "1", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "39", 
        "title": "11 Mugo Luvudeemos", 
        "name": "274506373_302381815_356651583.mp3", 
        "art": "1229728795_739090349_686501748.png", 
        "likes": "0", 
        "downloads": "1", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "40", 
        "title": "12 Onday Chedo Kud", 
        "name": "378498031_1470949688_1199351944.mp3", 
        "art": "308978665_1074723934_419931699.png", 
        "likes": "0", 
        "downloads": "0", 
        "plays": "0", 
        "uid": "2" 
       }, 
       { 
        "id": "41", 
        "title": "13 The Word", 
        "name": "956461611_287666310_43661088.mp3", 
        "art": "1584112229_240532531_977129308.png", 
        "likes": "1", 
        "downloads": "4", 
        "plays": "0", 
        "uid": "2" 
       } 
      ] 
     } 
    ] 
} 

, как вы можете видеть в приведенной выше структуре, плейлисты перечисляют связанные с ней треки в своем собственном вложенном массиве, я уверен, что таблица playlistentries должна быть использована для этого, но я не знаю, как ее реализовать, Извините за весь код ... но спасибо за вашу помощь!

+0

@CharlotteDunois Я попытался переместить массив треков в "()" массива плейлистов, но я получал ошибки, а затем я понял, что мне нужно использовать playlistentries как-то, чтобы заполнить массив для каждого плейлиста вложенными треками - это прошел мимо моего уровня мастерства и надеялся, что кто-то может показать мне, что я делаю неправильно –

ответ

2

попробовать это, код

<?php 
//Create Database connection 
$db = mysql_connect("localhost","-Username-","-Password-"); 
if (!$db) { 
    die('Could not connect to db: ' . mysql_error()); 
} 

//Select the Database 
mysql_select_db("-Database-",$db); 
{ 
$result = mysql_query("SELECT * FROM users ORDER BY username ASC"); 
$json_response = array(); //Create an array 
while ($row = mysql_fetch_array($result)) 
{ 
    $row_array = array(); 
    $row_array['idu'] = $row['idu']; 
    $row_array['username'] = $row['username']; 
    $row_array['first_name'] = $row['first_name']; 
    $row_array['last_name'] = $row['last_name']; 
    $row_array['country'] = $row['country']; 
    $row_array['image'] = $row['image']; 
    $row_array['cover'] = $row['cover']; 
    $row_array['description'] = $row['description']; 
    $row_array['playlists'] = array(); 
    //$row_array['tracks'] = array(); 
    $plid = $row['idu']; 

    $option_qry = mysql_query("SELECT * FROM playlists where playlists.by=$plid"); 
    while ($opt_fet = mysql_fetch_array($option_qry)) 
    { 
     $row_array['playlists'][] = array(
      'id' => $opt_fet['id'], 
      'name' => $opt_fet['name'], 
      'by' => $opt_fet['by'], 
     ); 


    //} 
    //array_push($json_response, $row_array); //push the values in the array 


    //tracks 


    $option_qry = mysql_query("SELECT * FROM tracks where tracks.uid=$plid"); 
    while ($opt_fet = mysql_fetch_array($option_qry)) 
    { 
     $row_array['playlists']['tracks'][] = array(
      'id' => $opt_fet['id'], 
      'title' => $opt_fet['title'], 
      'name' => $opt_fet['name'], 
      'art' => $opt_fet['art'], 
      'likes' => $opt_fet['likes'], 
      'downloads' => $opt_fet['downloads'], 
      'plays' => $opt_fet['views'], 
      'uid' => $opt_fet['uid'], 



     ); 


    } 
    //array_push($json_response, $row_array); //push the values in the array 
    array_push($json_response, $row_array); //push the values in the array 
} 
} 
echo json_encode($json_response,JSON_PRETTY_PRINT); 
} 
?> 
+0

Я пытаюсь получить связанные треки (добавленные в плейлист), вложенные под псевдонимом плейлистов, так что в основном треки будут гнездом третьего уровня 1 .user> 1.2playlist> 1.2.1tracks not 1.user> 1.2playlist 2tracks –

+0

Я пробовал этот код, его почти дал мне те же результаты, что и мой исходный код –

3

, чтобы получить треки в плейлист, вы должны добавить новый столбец в таблице треков называется в списке воспроизведения, так что вы можете запустить запрос MySQL и получить треки WHERE inplaylist = х

это мое решение (проверено на локальном хосте):

<?php 
//Create Database connection 
$db = mysql_connect("localhost","",""); 
if (!$db) { 
    die('Could not connect to db: ' . mysql_error()); 
} 

//Select the Database 
mysql_select_db("test",$db); 




$result = mysql_query("SELECT * FROM users ORDER BY username ASC"); 
$json_response = array(); //Create an array 
while ($row = mysql_fetch_array($result)) 
{ 
    $row_array = array(); 
    $row_array['idu'] = $row['idu']; 
    $row_array['username'] = $row['username']; 
    $row_array['first_name'] = $row['first_name']; 
    $row_array['last_name'] = $row['last_name']; 
    $row_array['country'] = $row['country']; 
    $row_array['image'] = $row['image']; 
    $row_array['cover'] = $row['cover']; 
    $row_array['description'] = $row['description']; 
    $row_array['playlists'] = array(); 
    $plid = $row['idu']; 

    $option_qry = mysql_query("SELECT * FROM playlists where playlists.by=$plid"); 
    $playlist = 1; 
    while ($opt_fet = mysql_fetch_array($option_qry)) 
    { 

     $row_array['playlists'][$playlist]['id'] = $opt_fet['id']; 
     $row_array['playlists'][$playlist]['name'] = $opt_fet['name']; 
     $row_array['playlists'][$playlist]['by'] = $opt_fet['by']; 

     $tracks_qry = mysql_query("SELECT * FROM tracks where tracks.uid=$plid AND tracks.inplaylist = {$opt_fet['id']}"); 
     while ($tcks_fet = mysql_fetch_array($tracks_qry)) 
     { 
      $row_array['playlists'][$playlist]['tracks'][] = array(
       'id' => $tcks_fet['id'], 
       'title' => $tcks_fet['title'], 
       'name' => $tcks_fet['name'], 
       'art' => $tcks_fet['art'], 
       'likes' => $tcks_fet['likes'], 
       'downloads' => $tcks_fet['downloads'], 
       'plays' => $tcks_fet['views'], 
       'uid' => $tcks_fet['uid'], 
      ); 
     } 
     $playlist++; 
    } 

    //tracks 




    array_push($json_response, $row_array); 

} 
print "<pre>"; 
echo json_encode($json_response,JSON_PRETTY_PRINT); 

?> 

мой выход:

[ 
    { 
     "idu": "2", 
     "username": "chicagochurch", 
     "first_name": "Chicago Christian Center", 
     "last_name": "", 
     "country": "United States", 
     "image": "8396748146691162.png", 
     "cover": "1731572302826016.jpg", 
     "description": "Music page.", 
     "playlists": { 
      "1": { 
       "id": "4", 
       "name": "We Give You Praise", 
       "by": "2", 
       "tracks": [ 
        { 
         "id": "29", 
         "title": "01 We Give You Praise", 
         "name": "1667450919_35711384_1898671201.mp3", 
         "art": "97020012_1272964020_1490042512.png", 
         "likes": "1", 
         "downloads": "1", 
         "plays": "4", 
         "uid": "2" 
        }, 
        { 
         "id": "30", 
         "title": "02 Luvudees", 
         "name": "1361859314_884859216_209326964.mp3", 
         "art": "1591964284_1156840179_1721104535.png", 
         "likes": "0", 
         "downloads": "1", 
         "plays": "3", 
         "uid": "2" 
        } 
       ] 
      }, 
      "2": { 
       "id": "5", 
       "name": "We Give You Praise 2", 
       "by": "2" 
      } 
     } 
    } 
] 
+0

Я пытаюсь получить треки, которые находятся в плейлистах, вложенных под плейлисты, подобные этому user1> playlists1> track1, track2, track3 и user1> playlist2> track1, track2, track3 получить его? –

+0

Я отредактировал решение, я считаю, что это то, что вы ищете –

+0

данные генерируются скриптом, который я приобрел из структуры таблицы codecanyon, уже настроен так, как он есть, они так, как они связывают треки в плейлисте, находятся в другая таблица, называемая «playlistentries», как вы можете видеть выше в моем первоначальном посте, я просто не знаю, как использовать эту таблицу, чтобы связать ее в этом скрипте –

Смежные вопросы