Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2792 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Trier résultat de 2 requetes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trier résultat de 2 requetes

n°1938839
Crawdge
Posté le 09-11-2009 à 08:56:23  profilanswer
 

Bonjour,
 
je viens vers vous suite à un problème sur mon développement.
 
En effet, j'ai deux requêtes (une sur la table étudiant, l'autre personnel) avec des champs différents, sauf un champ NOM (en gros). J'ai donc fait mes 2 requêtes, que j'ai mis dans un tableau.
J'ai donc un tableau avec mes résultat des 2 requêtes, mais il n'est pas trier.
 
Auriez vous une solution pour mélanger les 2 et les trier par nom? J'ai entendu parler de "array_multisort" mais je ne vois pas comment l'utiliser ni l'afficher par la suite...
 
 
Je vous joint les 2 requêtes et mon tableau.
 
Merci d'avance !
 
 

Code :
  1. $sql_etu="select NO_ETUDIANT as no_etu, NOM_USUEL as nom, PRENOM as prenom, NOM_PATRONYMIQUE as nom_patro, D_NAISSANCE as naiss, INE as ine, ADR_EMAIL as email, ADR_EMAIL_RENVOI as email_renvoi, LOGIN as login
  2.       FROM EXPLOIT_aua_etudiant
  3.       WHERE ((NOM_USUEL LIKE '{$valeur}')
  4.       OR (NOM_PATRONYMIQUE LIKE '{$valeur}')
  5.       OR (PRENOM LIKE '{$valeur}')
  6.       OR (ADR_EMAIL LIKE '{$valeur}')
  7.       OR (ADR_EMAIL_RENVOI LIKE '{$valeur}')
  8.       OR (LOGIN LIKE '{$valeur}'))";
  9.      
  10.           $sql_pers="select NO_INDIVIDU as no_ind, NOM_USUEL as nom, PRENOM as prenom, NOM_PATRONYMIQUE as nom_patro, ADR_EMAIL as email, LOGIN as login
  11.       FROM EXPLOIT_aua_personnel
  12.       WHERE ((NOM_USUEL LIKE '{$valeur}')
  13.       OR (NOM_PATRONYMIQUE LIKE '{$valeur}')
  14.       OR (PRENOM LIKE '{$valeur}')
  15.       OR (ADR_EMAIL LIKE '{$valeur}')
  16.       OR (LOGIN LIKE '{$valeur}'))";
  17.           $i=0;
  18.          
  19.       $tab_general= Array();
  20.       $query=mysql_query($sql_etu);
  21.           while ($ligne=mysql_fetch_object($query))
  22.           {
  23.             $tab_general[]=$ligne;
  24.           }
  25.       $query=mysql_query($sql_pers);
  26.           while ($ligne=mysql_fetch_object($query))
  27.           {
  28.             $tab_general[]=$ligne;
  29.           }


Message édité par Crawdge le 09-11-2009 à 09:06:49
mood
Publicité
Posté le 09-11-2009 à 08:56:23  profilanswer
 

n°1938842
flo850
moi je
Posté le 09-11-2009 à 09:15:17  profilanswer
 

mais après si tu regroupe des données différentes dans le même tableau , comment tu vas faire l'affichage ? tu ne saur pas si tu a un étudiant ou un personnel

 

pour les like, il me semble que la syntaxe est LIKE '%$valeur%'


Message édité par flo850 le 09-11-2009 à 09:15:44

---------------

n°1938843
Crawdge
Posté le 09-11-2009 à 09:22:35  profilanswer
 

Je peux savoir s'il est étudiant ou personnel en fonction du NO_ETUDIANT (que pour étudiant) ou du NO_INDIVIDU. (que pour le personnel)...
 
Pour l'affichage, je ne mets que le nom, prénom, adresse email et login...

n°1938845
pataluc
Posté le 09-11-2009 à 09:27:34  profilanswer
 

tu peux peut être pas revoir le modèle de données (dans ce cas je suis HS), mais la logique serait sans doute d'avoir une table générique (individu ou personne) qui contient tout ce qui est commun à ces 2 tables (nom, prénom, mail, login, etc...) et ensuite une table spécifique avec les infos spécifique (n° étudiant, ce genre de chose). enfin du bête héritage quoi, ce qui te permettrait d'extraire ces infos en une seule requête ensuite.


Message édité par pataluc le 09-11-2009 à 09:28:07
n°1938850
Crawdge
Posté le 09-11-2009 à 09:39:51  profilanswer
 

Malheureusement non, c'est pas moi qui ai fait la BDD... :-(

n°1938852
flo850
moi je
Posté le 09-11-2009 à 09:41:40  profilanswer
 

tu copie tout dans le meme tableau tableau  
ensuite tu utilises usort


---------------

n°1938856
Crawdge
Posté le 09-11-2009 à 09:46:17  profilanswer
 

j'ai bien tout dans mon tableau $tab_general....
Cependant je ne vois pas trop comment l'utiliser (enfin quoi lui mettre en paramètre, ni comment afficher ses résultats)
 

n°1938857
flo850
moi je
Posté le 09-11-2009 à 09:49:26  profilanswer
 

c'est plus simple que ça en a l'air

Code :
  1. usort($tab_general, "compareMesEtudiantsEtMesPersonnelsSuivantLeNom" );
  2.  
  3. function compareMesEtudiantsEtMesPersonnelsSuivantLeNom($a,$b){
  4. return strcmp($a['nom'],$b['prenom']);
  5. }


tu peux aussi ajouter une comparaison sur le prénom si le nom est identique

Message cité 1 fois
Message édité par flo850 le 09-11-2009 à 09:49:38

---------------

n°1938859
stealth35
Posté le 09-11-2009 à 09:51:08  profilanswer
 

juste une petite question elles sont en innoDB ou en myISAM tes tables ?

n°1938860
Crawdge
Posté le 09-11-2009 à 09:54:14  profilanswer
 

Il me mets une erreur : Fatal error: Cannot use object of type stdClass as array ...
 
 
(Elles sont en myISAM)

mood
Publicité
Posté le 09-11-2009 à 09:54:14  profilanswer
 

n°1938861
flo850
moi je
Posté le 09-11-2009 à 09:57:00  profilanswer
 

oups, j'ai oublié que tu utilisais mysql_fetch_object
 
remplace $a['nom']  par $a->nom


---------------

n°1938863
stealth35
Posté le 09-11-2009 à 10:01:47  profilanswer
 

Crawdge a écrit :

Il me mets une erreur : Fatal error: Cannot use object of type stdClass as array ...
 
 
(Elles sont en myISAM)


 
 
si t'es en myISAM ca serai plus pratique d'utilisé FullText deja pour ta requete (apres avoir mi ton fulltext biensur):
 
WHERE MATCH (NOM_USUEL, NOM_PATRONYMIQUE, PRENOM, ADR_EMAIL LIKE, ADR_EMAIL_RENVOI, LOGIN)  AGAINST  ('{$valeur}')";
 
 
sinon t'as PDO d'activer sur ton serveur ?
 

n°1938864
Crawdge
Posté le 09-11-2009 à 10:02:02  profilanswer
 

En effet ça marche mieux :)
 
cependant elles ne sont pas forcement trier, mais mélanger... rste a trouver avec quoi elles sont trier ^^ lol
 
Merci en tout cas !

n°1938866
Crawdge
Posté le 09-11-2009 à 10:03:03  profilanswer
 

stealth35 a écrit :


 
 
si t'es en myISAM ca serai plus pratique d'utilisé FullText deja pour ta requete (apres avoir mi ton fulltext biensur):
 
WHERE MATCH (NOM_USUEL, NOM_PATRONYMIQUE, PRENOM, ADR_EMAIL LIKE, ADR_EMAIL_RENVOI, LOGIN)  AGAINST  ('{$valeur}')";
 
 
sinon t'as PDO d'activer sur ton serveur ?
 


Je ne sais pas désolé de ne pouvoir te répondre :-/

n°1938868
stealth35
Posté le 09-11-2009 à 10:06:09  profilanswer
 

un simple   phpinfo()   fera l'affaire...

n°1938870
Crawdge
Posté le 09-11-2009 à 10:08:50  profilanswer
 

Il a l'air d'activer, mais je n'ai pas la main pour voir s'il l'est également sur le serveur de production...

n°1938892
stealth35
Posté le 09-11-2009 à 10:59:16  profilanswer
 

bon de tete et a l'arrache tu pourais faire ca

 

$s = array();
 
 foreach($total as $key => $value)
 {
  $s[$key] = $value->nom);
 }
 
 sort($s);
 
 $total_sort = array();
 
 foreach($s as $key => $value)
 {
  array_push($total_sort, $total[$key]);
 }


Message édité par stealth35 le 09-11-2009 à 10:59:43
n°1938902
stealth35
Posté le 09-11-2009 à 11:15:15  profilanswer
 

en version propre avec array_multisort
 

$listnom = array();
 
foreach($tab_general as $user)
{
    array_push($listnom, $user->nom);
}
 
array_multisort($tab_general, SORT_ASC, SORT_STRING, $listnom);

Message cité 1 fois
Message édité par stealth35 le 09-11-2009 à 11:15:33
n°1938908
flo850
moi je
Posté le 09-11-2009 à 11:18:18  profilanswer
 

tu sais que j'ai déjà donné  une solution qui n'implique pas de créer des tableaux supplémentaires ?


---------------

n°1938911
stealth35
Posté le 09-11-2009 à 11:21:33  profilanswer
 

Crawdge a écrit :


cependant elles ne sont pas forcement trier, mais mélanger... rste a trouver avec quoi elles sont trier ^^ lol


 

n°1938915
Crawdge
Posté le 09-11-2009 à 11:31:10  profilanswer
 

stealth35 a écrit :

en version propre avec array_multisort
 


$listnom = array();
 
foreach($tab_general as $user)
{
    array_push($listnom, $user->nom);
}
 
array_multisort($tab_general, SORT_ASC, SORT_STRING, $listnom);


j'a testé mais ca ne me sort pas non plus mon tableau trier.... c'est bizarre...  
 
C'est p'tet a mon affichage du coup...
pourtant j'ai :

Code :
  1. foreach($tab_general as $key)
  2.   {
  3.        ....
  4. }


Me serais-je trompé ?

n°1938948
stealth35
Posté le 09-11-2009 à 13:07:08  profilanswer
 

envoi tout ton code

n°1938950
Crawdge
Posté le 09-11-2009 à 13:14:14  profilanswer
 

stealth35 a écrit :

envoi tout ton code


Code :
  1. $sql_etu="select NO_ETUDIANT as no_etu, NOM_USUEL as nom, PRENOM as prenom, NOM_PATRONYMIQUE as nom_patro, D_NAISSANCE as naiss, INE as ine, ADR_EMAIL as email, ADR_EMAIL_RENVOI as email_renvoi, LOGIN as login
  2.       FROM EXPLOIT_aua_etudiant
  3.       WHERE ((NOM_USUEL LIKE '{$valeur}')
  4.       OR (NOM_PATRONYMIQUE LIKE '{$valeur}')
  5.       OR (PRENOM LIKE '{$valeur}')
  6.       OR (ADR_EMAIL LIKE '{$valeur}')
  7.       OR (ADR_EMAIL_RENVOI LIKE '{$valeur}')
  8.       OR (LOGIN LIKE '{$valeur}'))";
  9.      
  10.           $sql_pers="select NO_INDIVIDU as no_ind, NOM_USUEL as nom, PRENOM as prenom, NOM_PATRONYMIQUE as nom_patro, ADR_EMAIL as email, LOGIN as login
  11.       FROM EXPLOIT_aua_personnel
  12.       WHERE ((NOM_USUEL LIKE '{$valeur}')
  13.       OR (NOM_PATRONYMIQUE LIKE '{$valeur}')
  14.       OR (PRENOM LIKE '{$valeur}')
  15.       OR (ADR_EMAIL LIKE '{$valeur}')
  16.       OR (LOGIN LIKE '{$valeur}'))";
  17.           $i=0;
  18.    
  19.       $tab_general= Array();
  20.       $query=mysql_query($sql_etu);
  21.           while ($ligne=mysql_fetch_object($query))
  22.           {
  23.             $tab_general[]=$ligne;
  24.           } 
  25.          
  26.       $query=mysql_query($sql_pers);
  27.           while ($ligne=mysql_fetch_object($query))
  28.           {
  29.             $tab_general[]=$ligne;
  30.           }
  31.          
  32.     $listnom = array();
  33.     foreach($tab_general as $user)
  34.     {
  35.         array_push($listnom, $user->prenom);
  36.     }
  37.    
  38.     array_multisort($tab_general, SORT_ASC, SORT_STRING, $listnom); 
  39.    
  40.    
  41.              
  42.       echo "<br /><br /><table class='ui-widget ui-widget-content'>";
  43.    
  44.       echo "<thead class="ui-widget-header">
  45.         <tr>
  46.         <th>Nb</th>
  47.         <th>Statut</th>
  48.         <th>Nom</th>
  49.         <th>Pr&eacute;nom</th>
  50.         <th>Nom Patronymique</th>
  51.         <th>Login</th>
  52.         <th>Email</th>
  53.         <th>Email Renvoi</th>
  54.         </tr>
  55.        </thead>";
  56.      
  57.        foreach($tab_general as $key)
  58.         {
  59.         $i++; // Compteur
  60.        
  61.         echo "<tr>
  62.         <td>".$i."</td>";
  63.         if (isset($key->no_etu)){
  64.           $img_statut="<img src="utilisateurs/images/user-etu.png" alt="Etudiant" title="Etudiant">";
  65.         }else{
  66.            if (isset($key->no_ind)){
  67.           $img_statut="<img src="utilisateurs/images/user-perso.png" alt="Personnel" title="Personnel">";
  68.         }else{
  69.             $img_statut="";
  70.           }
  71.         }
  72.         echo "<td style="text-align:center;">{$img_statut}</td>
  73.         <td>".$key->nom)."</td>
  74.         <td>".$key->prenom."</td>
  75.         <td>".$key->nom_patro."</td>
  76.         <td>".$key->login."</td>
  77.         <td><a href="mailto:".$key->email."">".$key->email."</a></td>
  78.         <td>";
  79.          if (isset($key->email_renvoi)){
  80.             echo "<a href="mailto:".$key->email_renvoi."">".$key->email_renvoi."</a>";
  81.          }
  82.          echo "</td>
  83.         </tr>";
  84.        
  85.         }
  86.      
  87.      
  88.      
  89.       echo "</table>";

n°1938952
stealth35
Posté le 09-11-2009 à 13:23:49  profilanswer
 

ligne 36, faut mettre 'nom'  si tu veu trier par nom

n°1938960
Crawdge
Posté le 09-11-2009 à 13:45:05  profilanswer
 

oui j'avais change pour voir si ca triait par prenom si je changeais, mais ca ne change rien :)
 
j'ai juste oublié de remettre

n°1938962
stealth35
Posté le 09-11-2009 à 13:47:48  profilanswer
 

t'as les erreurs d'activé ?, parce que deja ton  '$i++' devrai t'en généré une

Message cité 1 fois
Message édité par stealth35 le 09-11-2009 à 13:48:00
n°1938963
pataluc
Posté le 09-11-2009 à 13:50:38  profilanswer
 

stealth35 a écrit :

t'as les erreurs d'activé ?, parce que deja ton  '$i++' devrai t'en généré une


why?

n°1938967
stealth35
Posté le 09-11-2009 à 13:56:06  profilanswer
 


 
parce que $i n'exite pas
 
faire d'hab $i = 0;
 
sinon  
 

Notice:  Undefined variable: i

n°1938970
pataluc
Posté le 09-11-2009 à 13:59:07  profilanswer
 

ligne 17 :spamafote:  (même si je te t'accorde que ca aurait été plus propre ligne 57)

Message cité 1 fois
Message édité par pataluc le 09-11-2009 à 13:59:54
n°1938971
stealth35
Posté le 09-11-2009 à 14:00:10  profilanswer
 

 

pas vu ils etaient caché  :pt1cable:

 

(ca aurai été plus simple d'utilisé la clé du tableau en plus)


Message édité par stealth35 le 09-11-2009 à 14:01:01
n°1938980
Crawdge
Posté le 09-11-2009 à 14:05:16  profilanswer
 

En effet ca aurai été plus logique plus bas la déclaration ^^
 
C'est que je faisais des tests et des ajouts et pas forcement au bon endroit ^^

n°1939330
Crawdge
Posté le 10-11-2009 à 10:54:28  profilanswer
 

flo850 a écrit :

c'est plus simple que ça en a l'air

Code :
  1. usort($tab_general, "compareMesEtudiantsEtMesPersonnelsSuivantLeNom";);
  2.  
  3. function compareMesEtudiantsEtMesPersonnelsSuivantLeNom($a,$b){
  4. return strcmp($a['nom'],$b['prenom']);
  5. }


tu peux aussi ajouter une comparaison sur le prénom si le nom est identique


Bon après une nuit de sommeil et de retour dessus, j'ai réutilisé ceci et ca marche....  [:crawdge:1]  
 
je comprend pas ce que j'ai fait de plus/moins, mais bon c'est nickel avec ça !  
 
Merci à tous ! ;)

n°1939336
flo850
moi je
Posté le 10-11-2009 à 11:03:26  profilanswer
 

:sol:


---------------

n°1939396
stealth35
Posté le 10-11-2009 à 14:05:07  profilanswer
 

moi je comprend pa le coup du 'strcmp' y'a un truc qui m'échappe dans la fonction 'usort', va falloir que je me penche dessus.  :whistle:


Message édité par stealth35 le 10-11-2009 à 14:05:29
n°1939412
fred777888​999
Posté le 10-11-2009 à 14:51:38  profilanswer
 

Félicitations. Tu viens de réaliser coté code ce que ta base aurait fait en plus facile et plus rapide avec une requete 'union'.

n°1939414
stealth35
Posté le 10-11-2009 à 15:03:45  profilanswer
 

fred777888999 a écrit :

Félicitations. Tu viens de réaliser coté code ce que ta base aurait fait en plus facile et plus rapide avec une requete 'union'.

 

non,

 

The used SELECT statements have a different number of columns


Message édité par stealth35 le 10-11-2009 à 15:04:01
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Trier résultat de 2 requetes

 

Sujets relatifs
[RESOLU]Plusieurs requetes SQL en une seul sous forme de tableauMSDOS - redirection du resultat d'une commande find dans une variable
Trier celons les valeurssurveiller les requêtes ou tables modifiées sur MySQL
Problème d' espace dans le résultat de la date[Oracle] Factoriser de multiples requêtes sur la même vue
Group By - Mysql: Comment eviter de faire plusieurs requetes ?[VBS] Récupérer Résultat d'une appli
requetes multiples Mysql[PHP] Listing de fichier, trier par date
Plus de sujets relatifs à : Trier résultat de 2 requetes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR