tri en php

tri en php - PHP - Programmation

Marsh Posté le 10-08-2010 à 16:48:17    

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";


.....

Reply

Marsh Posté le 10-08-2010 à 16:48:17   

Reply

Marsh Posté le 10-08-2010 à 16:59:41    

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?

Reply

Marsh Posté le 10-08-2010 à 17:03:27    

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>";

Reply

Marsh Posté le 10-08-2010 à 17:09:01    

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)) { ...

Reply

Marsh Posté le 11-08-2010 à 16:06:46    

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

Reply

Marsh Posté le 12-08-2010 à 12:58:17    

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
Reply

Marsh Posté le 12-08-2010 à 15:23:45    

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
Reply

Marsh Posté le 12-08-2010 à 15:28:11    

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

Reply

Marsh Posté le 13-08-2010 à 09:58:44    

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.

Reply

Marsh Posté le 13-08-2010 à 11:13:30    

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)

Reply

Marsh Posté le 13-08-2010 à 11:13:30   

Reply

Marsh Posté le 24-08-2010 à 16:04:25    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed