begin process at 2012 05 31 02:52:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Problème de tri de résultat


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de tri de résultat

dimanche 24 octobre 2010 à 14:26:11 | Problème de tri de résultat

nagrom13

Bonjour,
Je vais essayer d'expliquer clairement mon problème.

Je fais une requete sur une table pour récupérer des infos et je veux afficher le résultat sous forme de tableau. Jusque la pas de problème.
Il se trouve que dans la table différentes données sont stockées sous forme d'une concaténation séparée par des guillemets. En gros j'aurais aimé faire un tri des résultats sur un des éléments de cette concaténation.

Exemple :

while($row = mysql_fetch_row($result)){
$userid = $row[0];
$username = $row[1];
$time = $row[2];
$sdata = $row[3];
$arr_data = explode('"', $sdata);
}

en fait sdata est de la forme a:5:{i:55;s:5:"Paris";i:62;s:7:"Toronto";i:57;s:15:"6 February 2011"}

Ensuite dans mon while je fais :
echo '<tr class="resultat">
<th class="id">'.$row[0].'</th>
<th class="pseudo">'.$row[1].'</th>
<th class="provenance">'.$arr_data[1].'</th>
<th class="destination">'.$arr_data[3].'</th>
<th class="date_depart">'.$arr_data[5].'</th>
</tr>';

Mais j'aimerai que le tableau soit trier en fonction de date_depart. Si date_depart avait été une colonne de ma table j'aurai fait un simple order by date_depart dans ma requete mais la je ne peux pas.

Quelqu'un pourrait il éclairé ma lanterne ?

Merci


dimanche 24 octobre 2010 à 14:59:40 | Re : Problème de tri de résultat

TychoBrahe

Salut,

Avant d'aller plus loin tu devrais revoir la structure de ta base de donnée, stocker ses donnés dans un varchar (ou autre) dans un format spécial pour ensuite interpréter ce format est franchement immonde. On y perd tout l'intéret des bases de données, il ne faux jamais faire ça, et c'est malheureusement une erreur assez classique chez les débutants. Afin de t'aider à refaire ta base de donnée je te recommande cet article que j'ai écrit : Des bases de données relationnelles et multivaluées.
dimanche 24 octobre 2010 à 15:04:03 | Re : Problème de tri de résultat

nagrom13

Entièrement d'accord avec toi, c'est tout simplement immonde. Je bosse néanmoins sur un existant.
Je suis beaucoup plus analyste que programmeur et voir de telles choses n'est jamais très plaisant :)
Evidemment si j'avais la main sur tout j'aurai vite modifié tout ça ;)
Malheureusement on doit quelque fois bosser avec ce qu'on nous donne ^^

Merci pour le lien ;)
dimanche 24 octobre 2010 à 15:35:54 | Re : Problème de tri de résultat

TychoBrahe

T'as vraiment pas de chance toi :/

Donc pour ton tri de tableau, tout est là : Tri des tableaux.
dimanche 24 octobre 2010 à 21:40:44 | Re : Problème de tri de résultat

neigedhiver

Salut,

Juste comme ça : sdata est un tableau linearisé, avec serialize() . Pour le délinéariser : unserialize(). C'est un peu mieux que explode(), ça permet surtout de récupérer tout le tableau.
Je sais pas si c'est utile ou pas...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
lundi 25 octobre 2010 à 16:41:10 | Re : Problème de tri de résultat

nagrom13

Merci a vous deux je vais me repencher dessus ;)
samedi 30 octobre 2010 à 13:11:48 | Re : Problème de tri de résultat

nagrom13

Bon je vais me faire taper sur les doigts mais je suis un peu perdu :)

//Recuperation resultats
$index=0;
while($row = mysql_fetch_row($result)){

$userid = $row[0];
$username = $row[1];
$time = $row[2];
$sdata = $row[3];
$arr_data = explode('"', $sdata);
$ligne= array($userid, $username, $time, $arr_data[1], $arr_data[3], $arr_data[5], $arr_data[7], $arr_data[9], $arr_data[11]);
$arr_result = array_fill($index,1,$ligne);
$index++;
echo ''.$arr_result[0][0].''; // résultat ok
}
echo ''.$arr_result[0][0].''; // vide ??

- Je ne comprends pas pourquoi lorsque je fais un
echo ''.$arr_result[0][0].''; dans la boucle while cela me donne bien ce que je veux mais en dehors du while arr_result est vide...

- Malgré votre aide et la doc je ne vois pas trop quel tri effectuer pour classer ce tableau selon la valeur de $arr_result[0][5] par exemple (d'autant plus qu'en dehors du while il ne vaut rien).




samedi 30 octobre 2010 à 21:26:11 | Re : Problème de tri de résultat

yexbe


bonjour,

as-tu la main sur l'ordre mysql ?
car on pourrait demander à mysql de faire le tri avant d'avoir les resultats non...
je teste un bout de code et te le transmets

Elodie SAVARY

Touko Technologies : création de sites internets et de logiciels sur mesure
samedi 30 octobre 2010 à 22:00:21 | Re : Problème de tri de résultat

yexbe


voici le tri sql que je te propose

Code :
SELECT * from matable order by STR_TO_DATE(SUBSTRING(SUBSTRING_INDEX(monchamp, '\"', -2),1,LENGTH(SUBSTRING_INDEX(monchamp, '\"', -2))-2),'%e %M %Y');


je detaille
ton exemple : a:5:{i:55;s:5:"Paris";i:62;s:7:"Toronto";i:57;s:15:"6 February 2011"}

SUBSTRING_INDEX(`monchamp`, '\"', -2) donne la fin de la chaine en partant de l'avant derniere occurence de " dans ce champ
on obtient : 6 February 2011"}

LENGTH(SUBSTRING_INDEX(`monchamp`, '\"', -2)) donne la longueur de cette chaine
on obtient 17

SUBSTRING(SUBSTRING_INDEX(`monchamp`, '\"', -2),1,LENGTH(SUBSTRING_INDEX(`monchamp`, '\"', -2))-2) permet donc d'enlever les deux derniers caractères de la sous chaine
on obtient 6 February 2011

STR_TO_DATE(SUBSTRING(SUBSTRING_INDEX(`monchamp`, '\"', -2),1,LENGTH(SUBSTRING_INDEX(`monchamp`, '\"', -2))-2),'%e %M %Y') transforme cette chaine en date mysql
on obtient 2011-02-06

et on trie directement dans l'ordre sql sur cette valeur...

après il faut voir au niveau des temps de réponses si c'est jouable et cela dépend de ta base.

Elodie SAVARY

Touko Technologies : création de sites internet et de logiciels sur mesure


Cette discussion est classée dans : problème, data, tri, row, arr


Répondre à ce message

Sujets en rapport avec ce message

problème de commandes mysql [ par juenic ] Voila je débute en php et mysql et je voulais faire un import depuis mysql vers xml, j'ai repris ce script : //Ouverture de base de données mysql_conn Problème pour diviser une variable qui vient d'une combo en 2 [ par ndsaerith ] Bonjour otut le monde! Voila j'ai un petit pb. J'affiche des noms dans une combo box : echo ''; while($data=mysql_fetch_array($req))     {     echo Gros problème BDD [ par kodiask ] voila mon code il consiste a remplacer les lettres par une image...while($data = mysql_fetch_array($req)) { $data['nom'] =str_replace('a','',$da Probleme de TRI [ par restesouple ] Salut! Voià mon code: while($data = mysql_fetch_array($req)) {  if ($donnee!='') {   $donnee = ''.$donnee. ', "' .($data['valeur1'] + $data['valeur2'] problème avec fichier CSV [ par xris ] Bonjour, Je sui perdu : j'utilise la fonction fgetcsv de la façon suivante : $row = 1; $handle = fopen("data.csv", "rb"); while (($data = fgetcsv($ Problème de lien [ par theseif ] Bonjour, dans une page php j'utilise un lien de ce genre: .$data[</ Problème concatenation [ par kenar ] Bonjour,J'ai un petit problème avec la concatenation.Quand je fait :      $conect = "C:\DATA\ $ville .CHF";                               echo $conect gros problème avec un lien !! :S [ par jimmypage64 ] J'ai le code suivant : 1 2           $req = "select * from Topics ORDER BY NomTopic;"; 3            //exécution de la requête 4 &n Fichier texte [ par rochametallica ] Salut tout le monde, je voudrais avoir votre aide pour résoudre un problème, alors je voudrais un code en PHP qui me lis des valeurs d'un fichier text Problème de Tableau ! Aide moi Sniff Snif :P [ par Many_hack ] Bonjours ! j'ai commencé hummm, voila deux jours le PHP 5, mais maintenantje suis maleureusement arrêter a ce problème car je ne comprend pas pourquoi


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales