Handle multiple-rows through join mysql tables via PHP -
i have id of album , i'd show tracks of album in json file. album has many tracks , track has many producers (artists).
database structure

mysql query
select * tracks left join produced on produced.produced_track = tracks.track_id left join artists on produced.produced_artist = artists.artist_id tracks.track_album = 1 result

what i'd show via php

i'd create json object different tracks , related artists. problem how handle sql result in order create object.
here sql code per final output use.
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 `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'); and php code.
$arr = array(); $rs = mysql_query("select track_id,track_name,group_concat(artist_id) artist_id ,group_concat(artist_name separator 0x1d ) artist_name tracks group 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']) $k1 => $v1 ){ $arr [$i]['artists'][] = array ( 'id' => $artist_id_array[$k1] , 'name' => $artist_name_array[$k1] ) ; } $i++; } echo json_encode($arr);exit; here final output.
[ { "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" } ] } ] as per join query use
select track_id,track_name,group_concat(artist_id) artist_id ,group_concat(artist_name separator 0x1d ) artist_name tracks left join produced on produced.produced_track = tracks.track_id left join artists on produced.produced_artist = artists.artist_id
Comments
Post a Comment