Ordenar respuestas
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>   '.htmlspecialchars($Prenom).' '.htmlspecialchars($Nom).'<br>   Tph : '.htmlspecialchars($Tph).' <br>   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
-
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)
-
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