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

  FORUM HardWare.fr
  Programmation
  PHP

  tri en php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tri en php

n°2015823
tapi21
Posté le 10-08-2010 à 16:48:17  profilanswer
 

Bonjour,
je récupère des données dans une base avec un "select" suivi d'un 'order by', mais cette instruction ne me trie pas mes données.
Avant le "select", j'utilise une instruction "foreach" et j'ai l'impression que celle-ci courcircuite le 'order by'.
Voilà un extrait du code.
Merci

Code :
  1. foreach($segt as $value) {
  2.   $query8 = "select * from eddypart where agcepo='$unite' and segt='$value' and convention='$conv1' and cbp='$cbp1' and cbi='$cbi1' and indig='$indig1' and iard='$iard1' and ctconso='$ctconso1' ORDER BY Nom_Usuel";


.....

mood
Publicité
Posté le 10-08-2010 à 16:48:17  profilanswer
 

n°2015830
gelatine_v​elue
Posté le 10-08-2010 à 16:59:41  profilanswer
 

Nan nan nan c'est pas le foreach qui courcircuite ta requête, ton SGBD ne sait même pas d'où vient la requête. Si le order by ne trie pas tes données c'est inquiétant.
 
Que donne la même requête mais lancée directement sur la BD (sans passer par php)? Comment récupères-tu le résultat de la requête?

n°2015832
tapi21
Posté le 10-08-2010 à 17:03:27  profilanswer
 

Merci de la réponse,
Je n'ai pas lancé la requête directement sur la BD (faut que je cherche comment faire).
Quant à la récupération du résultat, je passe "simplement" par un "while"
 
$result8=odbc_exec($conn, $query8);    
 
 
while (odbc_fetch_row($result8)) {
 
echo "<tr>";
  echo "<td bgcolor=$color><div align=center><font face=Arial size=1><strong>";
  print odbc_result($result8,6);echo"</td>";
  echo "<td bgcolor=$color><div align=center><font face=Arial size=1><strong>";
  print odbc_result($result8,43);echo"</td>";

n°2015836
gelatine_v​elue
Posté le 10-08-2010 à 17:09:01  profilanswer
 

Il me parait plus plausible que odbc_fetch_row ne lise pas les résultats triés dans le bon ordre.
 
Essaie d'utiliser ceci à la place (t'es sous php5)?:
 
odbc_fetch_row($stringsql, 0);
 
while (odbc_fetch_row($stringsql)) { ...

n°2016115
tapi21
Posté le 11-08-2010 à 16:06:46  profilanswer
 

Je ne suis pas en PHP5
Je pense que le problème vient de "foreach" et du "select" qui est inclus à l'intèrieur.
Je pense me diriger vers une solution qui consisterait à placer le résultat du "select" dans un tableau et à le trier.
Auriez-vous un exemple de code pour faire ça ?
Merci

n°2016362
aideinfo
Posté le 12-08-2010 à 12:58:17  profilanswer
 

Je ne sais pas ce qu'il y a dans ton array, mais tes requêtes vont être exécutées selon l'ordre de ce dernier, que tu es un order by ou non. L'order by va trier les données de chaque requête, pas les données de toutes les requêtes. Mais comme on ne sait pas ce qui n'est pas trié...


---------------
http://www.aideinfo.com/  Whois adresses IP/domaines le plus évolué !!  FAQ Free Mobile
n°2016471
tapi21
Posté le 12-08-2010 à 15:23:45  profilanswer
 

Je vais essayer d'être plus clair.
Avant d'afficher toutes les lignes issues du "select", je souhaitais les trier sur un champ de la base qui ne fait pas parti des éléments qui se trouvent dans le "select"
Voilà une partie du code :
 

Code :
  1. foreach($segt as $segt1) {
  2.        $query8 = "select * from eddypart where agcepo='$unite' and segt='$segt1' and convention='$conv1' and cbp='$cbp1' and cbi='$cbi1' and indig='$indig1' and iard='$iard1' and ctconso='$ctconso1' ORDER BY Nom_Usuel";
  3.       $result=odbc_exec($conn, $query8);
  4. while (odbc_fetch_row($result)) {
  5. ......


Je pensais mettre tous les éléments récupérés du "select" dans un tableau, le trier et ensuite les faire afficher.
Merci


Message édité par tapi21 le 12-08-2010 à 15:24:21
n°2016474
gelatine_v​elue
Posté le 12-08-2010 à 15:28:11  profilanswer
 

Mais mais... comment tu veux le trier en php puisque le champ ne sera pas dans les données retournées?

n°2016642
tapi21
Posté le 13-08-2010 à 09:58:44  profilanswer
 

Ben, je pensais, puisque le select se fait sur tous les champs de la base (dont le champ "Nom_Usuel), je pouvais mettre toutes mes données dans un tableau, le trier et n'afficher ensuite que certains champs.

n°2016673
jeff@be
Posté le 13-08-2010 à 11:13:30  profilanswer
 

A la place de
 

Code :
  1. foreach($segt as $segt1) {
  2.        $query8 = "select * from eddypart where agcepo='$unite' and segt='$segt1' and convention='$conv1' and cbp='$cbp1' and cbi='$cbi1' and indig='$indig1' and iard='$iard1' and ctconso='$ctconso1' ORDER BY Nom_Usuel";
  3. }


 
tu fais
 

Code :
  1. $query8 = "select * from eddypart where agcepo='$unite' and segt IN ('" . join("','", $segt) . "') and convention='$conv1' and cbp='$cbp1' and cbi='$cbi1' and indig='$indig1' and iard='$iard1' and ctconso='$ctconso1' ORDER BY Nom_Usuel";


 
et le tri se fait par le sgbd (sans compter que tu ne fais qu'une requête ce qui est énormément mieux)

mood
Publicité
Posté le 13-08-2010 à 11:13:30  profilanswer
 

n°2018720
tapi21
Posté le 24-08-2010 à 16:04:25  profilanswer
 

Il a fallu que je laisse un peu de coté l'application, mais je vais partir dans ta direction.
Merci


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

  tri en php

 

Sujets relatifs
Plus de sujets relatifs à : tri en php


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