Ordenar respuestas

danielos77 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   -  
danielos77 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   -

Hola,

Tengo un fragmento de código que funciona muy bien, pero me gustaría, si es posible, ordenar el orden de visualización Presidente/Secretario/Tesorero/Responsable de actividad A / Responsable de actividad B... sabiendo que una misma persona puede tener varias funciones (de ahí el explode).
 

<?php //activación de la visualización de errores PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //incluye el archivo de conexión a la bdd require_once ""; //preparación de la consulta según la unidad elegida $sth="SELECT Nom, Prenom, Tph, Mail, Unite, Fonction FROM Fonctions where Unite = :unite ORDER BY Nom ASC" ; try{ //Preparación consulta $req =$bdd->prepare($sth); //ejecución $req->bindValue(':Unite',$nomUnite); $req->execute(); //se recuperan los resultados $result = $req->FetchAll(); } catch(Exception $e){ // en caso de error : echo " <br>Erreur ! ".$e->getMessage(); echo " <br>Las datas : " ; print_r($datas); } /* echo'<pre>'; var_dump($result); die(); echo'</pre>'; */ if (!empty($result)){ foreach ($result as $ligne) { //obtención de la información $Nom = $ligne['Nom']; $Prenom = $ligne['Prenom']; $Mail = $ligne['Mail']; $Tph = $ligne['Tph']; $Unite = $ligne['Unite']; $Fonction = $ligne['Fonction']; $fonction = explode(", ", $Fonction); foreach($fonction as $key => $fonction) { echo' <font size="4"> <ul><li>'.htmlspecialchars($fonction).' :<br> &emsp;&emsp;'.htmlspecialchars($Prenom).' '.htmlspecialchars($Nom).'<br> &emsp;&emsp;Tph : '.htmlspecialchars($Tph).' <br> &emsp;&emsp;Mail : '.htmlspecialchars($Mail).' </li></ul> '; } } }else{ echo' <p style="margin-left: 40px;"> <font size="5"> Esta Unidad no parece estar activa... ¿Estás seguro de quererla elegir cuando mismo ? </font><br> <i>(Para cambiarlo, puedes consultar el mapa de actividades en tu espacio personal y cambiarlo.)</i><br> '; } ?>

Había pensado poner un if ($fonction="Président")[echo'....';} elsif($fonction="Secrétaire"){echo'...';} etc... entre el "if (!empty($result)){ y el foreach.." pero eso no parece la solución. Agradecería un consejo. 
 

Gracias de antemano,
Daniel

2 respuestas

  1. jee pee Mensajes publicados 31945 Fecha de registro   Estado Moderador Última intervención   10 003
     

    Hola,

    Una idea podría ser generar el orden directamente en el select mediante un campo calculado a partir del campo función.

    Con Oracle usaba decode() en mysql hay CASE que se parece o quizá IFNULL(ELT(FIELD()) como se propone en  

    Podría ser:

    SELECT Nom, Prenom, Tph, Mail, Unite, Fonction, CASE Fonction when 'Président' then 1 when 'Secrétaire' then 2 when 'Tésorier' then 3 when '...' then 9 else 99 END AS Tri FROM Fonctions ORDER BY Tri, Nom

    Si una persona puede tener 2 funciones, tu modelo de BD no es ideal. Sería mejor tener una tabla Persona y una tabla Función (PersonaId, Fonction)


    0
  2. danielos77 Mensajes publicados 117 Fecha de registro   Estado Miembro Última intervención   2
     

    Buenas noches Jee Pee,
    Gracias por la idea de las tablas separadas.
    Mis funciones provienen de select name [ ] de donde proviene mi variable a desestructurar/explicar.

    Por eso buscaba una solución para ordenar en la pantalla.
    @+
    Daniel

    0