Il group concat potrebbe essere una soluzione ma dispendiosa perchè di fatto potresti concatenare o 1 o xxxx records (dovresti poi modificare il
group_concat_max_len altrimenti ti taglia la stringa), inoltre non capisco perchè devi fare due select per avere i link buoni da quelli errati basta un ifnull sul campo link, se è vuoto imposti tu la stringa "Error@".
Io farei fare tutto al buon php con un ciclo di array.
// raccogli TUTTI i records, imposterei manualmente il campo "errore_foto" giusto per ciclare piu' facilmente i records dopo
$sql = mysqli_query($mysqli_connection, "select gruppo, nome_foto, ifnull(link,'Error@') as link, if(link IS NOT NULL,0,1) as errore_foto from FOTO where......");
$records = mysqli_fetch_assoc($sql);
// poi fai un ciclo per dividere i link buoni da quelli errati
// dichiari il nuovo array
$arrayFoto = [];
foreach($records as $r){
if($r['errore_foto'] == 1){
//se la foto è in errore popoliamo l'array foto errate
$arrayFoto['errate'][] = $r;
// oppure metti tu i dati che vuoi
$arrayFoto['errate'][] = $r['gruppo']."_".$r['nome_foto']."_",$r['link'];
}else{
//altrimenti popoliamo l'array delle foto buone
$arrayFoto['buone'][] = $r;
// oppure metti tu i dati che vuoi
$arrayFoto['errate'][] = $r['gruppo']."_".$r['nome_foto']."_",$r['link'];
}
}
Cosi facendo abbiamo creato un array multidimensionale con al proprio interno due subarray di foto..quelle buone e quelle errate..
se fai un print_r($arrayFoto) vedrai il risultato.
Adesso potrai gestire singolarmente i due array creati.
Con 8 righe di codice hai finito
EDIT: Collegando il post nella board JS sul JSON parse stampando un json_encode($arrayFoto) e facendo il parse in JS avrai esattamente gli stessi 2 array foto buone ed errate.