RunOneSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE( table: 'Tunes', id: $targetTuneVariantID ) ->cols([ 'T.ID AS TuneID', "CONCAT('[', GROUP_CONCAT( CONCAT( '{\"TimeSignature\":', JSON_QUOTE(T_TP.TimeSignature), ',', '\"KeySignature\":', JSON_QUOTE(T_TP.KeySignature), ',', '\"ABCNotation\":', JSON_QUOTE(T_TP.ABCNotation), '}' ) ), ']') AS Parts" ]) ->join( join: 'INNER', spec: 'TuneParts AS T_TP', cond: 'T.ID = T_TP.TuneID' ) ->groupBy(spec: [ 'T.ID', ]) ); $tuneDetails = $db->RunOneSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE( table: 'Tunes', id: $variantDetails['TuneID'] ) ); $tuneDetails = new DatabaseFolkTuneDetails($tuneDetails); $variantDetails = new TuneVariant($tuneDetails, $variantDetails); header(header: "Content-type: text/text"); echo $variantDetails->Build(); die();