1

我有一张专辑的 ID,我想在 json 文件中显示这张专辑的所有曲目。一张专辑有很多曲目,而一个曲目有很多制作人(艺术家)。

数据库结构

数据库结构

MySQL 查询

SELECT * FROM tracks 
         LEFT JOIN produced ON produced.produced_track = tracks.track_id 
         LEFT JOIN artists ON produced.produced_artist = artists.artist_id 
WHERE tracks.track_album = 1

结果

MySQL 结果

我想通过 PHP 展示什么

PHP 结果

我想创建一个包含不同曲目及其相关艺术家的 json 对象。我的问题是如何处理 sql 结果以创建此对象。

4

1 回答 1

1

这是SQL我使用的最终输出的代码。

CREATE TABLE `tracks` (
  `track_id` int(10) NOT NULL,
  `track_name` varchar(255) NOT NULL,
  `produced_track` int(10) NOT NULL,
  `produced_artist` int(10) NOT NULL,
  `artist_id` int(10) NOT NULL,
  `artist_name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `tracks`(`track_id`,`track_name`,`produced_track`,`produced_artist`,`artist_id`,`artist_name`) values (1,'Get Luckey Original  ',1,3,3,'Daft Prunk'),(1,'Get Luckey Original  ',1,4,4,'Pharell'),(2,'Touch',1,5,3,'Daft Prunk'),(2,'Touch',1,5,5,'Paul');

这是PHP代码。

$arr = array();
$rs = mysql_query("SELECT track_id,track_name,GROUP_CONCAT(artist_id) AS artist_id ,GROUP_CONCAT(artist_name SEPARATOR 0x1D ) AS artist_name FROM tracks GROUP BY track_id");
$i = 0;
while($v = mysql_fetch_assoc($rs)){
        $arr [$i]['track_id'] = $v['track_id'];
        $arr [$i]['name'] = $v['track_name'];
        $artist_name_array = explode( chr(29) , $v['artist_name'] );
        foreach($artist_id_array = explode(',',$v['artist_id']) as $k1 => $v1 ){
            $arr [$i]['artists'][] = array ( 'id' => $artist_id_array[$k1] , 'name' => $artist_name_array[$k1] ) ;
        }
        $i++;

}
echo json_encode($arr);exit;

在这里我们您的最终输出。

[
    {
        "track_id": "1",
        "name": "Get Luckey Original  ",
        "artists": [
            {
                "id": "3",
                "name": "Daft Prunk"
            },
            {
                "id": "4",
                "name": "Pharell"
            }
        ]
    },
    {
        "track_id": "2",
        "name": "Touch",
        "artists": [
            {
                "id": "3",
                "name": "Daft Prunk"
            },
            {
                "id": "5",
                "name": "Paul"
            }
        ]
    }
]

根据您的JOIN查询使用此

SELECT track_id,track_name,GROUP_CONCAT(artist_id) AS artist_id ,GROUP_CONCAT(artist_name SEPARATOR 0x1D ) AS artist_name FROM tracks 
         LEFT JOIN produced ON produced.produced_track = tracks.track_id 
         LEFT JOIN artists ON produced.produced_artist = artists.artist_id
于 2013-05-15T20:53:14.243 回答