RunOneSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT_ONE( table: 'Tunes', id: $_GET["tune-id"] ) ->cols(cols: [ 'SUM(CASE WHEN T_TR.Rating = 1 THEN 1 ELSE 0 END) AS Likes', 'SUM(CASE WHEN T_TR.Rating = -1 THEN 1 ELSE 0 END) AS Dislikes', ]) ->join( join: 'LEFT', spec: 'TuneRatings AS T_TR', cond: 'T.ID=T_TR.TuneID', ) ); $setsThisTuneIsIn = $db->RunSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT( table: 'TuneSetTunes' ) ->cols(cols: [ 'T_TS.ID AS TuneSetID', 'T_TS.Description AS TuneSetName', ]) ->join( join: 'INNER', spec: 'TuneSets AS T_TS', cond: 'T.TuneSetID=T_TS.ID', ) ->where(cond: 'T.TuneID LIKE :__tune_id__') ->bindValue(name: '__tune_id__', value: $_GET["tune-id"]) ->groupBy(spec: [ 'T.TuneSetID', ]) ); $myVote = 0; if(SessionWrapper::Get(SessionElement::IS_LOGGED_IN)) { $myVote = $db->RunSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT( table: 'TuneRatings', ) ->cols(cols: [ 'Rating' ]) ->where(cond: 'CreatedBy=:__user_id__') ->where(cond: 'TuneID=:__tune_id__') ->bindValue(name: '__user_id__', value: SessionWrapper::Get(SessionElement::USER_ID)) ->bindValue(name: '__tune_id__', value: $_GET["tune-id"]) ); if($myVote == []) $myVote = 0; else { $myVote = $myVote[0]['Rating']; } } $tuneParts = $db->RunSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT( table: 'TuneParts', ) ->where(cond: 'T.TuneID=:__tune_id__') ->bindValue(name: '__tune_id__', value: $tuneDetails['ID']) ); $similarTuneParts = []; foreach($tuneParts as $tunePartDetails) { $similarTunesA = $db->RunSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT( table: 'SimilarTuneParts', ) ->cols(cols: [ 'T_T.ID AS TuneID', 'T_T.Title AS TuneTitle', 'T_TP.PartLetter AS TunePartLetter', ]) ->join( join: 'INNER', spec: 'TuneParts AS T_TP', cond: 'T.TunePartB=T_TP.ID', ) ->join( join: 'INNER', spec: 'Tunes AS T_T', cond: 'T_TP.TuneID=T_T.ID', ) ->where(cond: 'T.TunePartA=:__tune_part_id__') ->bindValue(name: '__tune_part_id__', value: $tunePartDetails['ID']) ); $similarTunesB = $db->RunSelect( queryBuilder: SQLQueryBuilderWrapper::SELECT( table: 'SimilarTuneParts', ) ->cols(cols: [ 'T_T.ID AS TuneID', 'T_T.Title AS TuneTitle', 'T_TP.PartLetter AS TunePartLetter', ]) ->join( join: 'INNER', spec: 'TuneParts AS T_TP', cond: 'T.TunePartA=T_TP.ID', ) ->join( join: 'INNER', spec: 'Tunes AS T_T', cond: 'T_TP.TuneID=T_T.ID', ) ->where(cond: 'T.TunePartB=:__tune_part_id__') ->bindValue(name: '__tune_part_id__', value: $tunePartDetails['ID']) ); $builder = []; foreach($similarTunesA as $temp) $builder[] = $temp; foreach($similarTunesB as $temp) $builder[] = $temp; $similarTuneParts[$tunePartDetails['PartLetter']] = $builder; } TwigWrapper::RenderTwig( target: "Pages/tune/uuid.html.twig", arguments: [ "TuneDetails"=>$tuneDetails, "SetsThisTuneIsIn" => $setsThisTuneIsIn, "MyVote"=>$myVote, "SimilarTuneParts"=>$similarTuneParts, ] );