Reqeuete sql et order by

sisi -  
 sisi -
Bonjour,

J'ai une requete comme ceci :
$query = "SELECT data_txt,fieldid from data where itemid=".$id_param->itemid." order by data_txt desc";

Dans ma table, j'ai un champ qui se nomme : data_txt.

Dans ce champ sont stockés : adresse mail, tarif, nom, prenom ...
Il y a tout dedans. Un itemid permet de les classer.

Exemple annonce 1 (itemid 1) qui contient dans data_txt : moi@eee.fr, 100, Proul, Michel ...
annonce 2 (itemid 2) qui contient dans data_txt : tttttoi@eee.fr, 25, Patoulatchi, Michel...

C'est un composant réalisé pour Joomla donc je ne peux le modifier ...

Ce que j'aimerais faire c'est lister tout ces résultats par ordre de prix ASC ou DESC.

Comment faire car ma requete actuelle tri mais prend en compte les champs texte ...?

Il me faudrait quelque chose dans ce style :

where itemid=".$id_param->itemid." order by data_txt='16' desc"
A voir également:

4 réponses

sisi
 
en faite, le prix a comme fieldid le numéro 16.

Donc il faudrait dans ma requete tester where fieldif='16' et trier selon le prix ...
0
Jessy
 
Bon je sais pas si je vais répondre au sujet et surtout si j'ai bien compris.

Quand tu fais ta requête, tu obtient donc un seul champ texte qui content toutes les infos séparer par des ','.

Il existe une méthode en PHP qui à partir d'une variable, retourne un tableau se sous-chaîne de caractères en utilisant un séparateur (fonction split().

C'est à dire que dans ton cas je ferais un truc du genre :


$query = "SELECT data_txt,fieldid from data where itemid=".$id_param->itemid." order by data_txt desc"; 

$tab = $query[0].split(',');



Donc avec la fonction split tu obtiens un tableau $tab de taille $tab.length.
Pour l'exemple ou $query[0] = "moi@eee.fr, 100, Proul, Michel"

Tu obtiens donc
$tab[0] = "moi@eee.fr"
$tab[1] = "100"
$tab[2] = "Michel"


Après c'est une idée un peu rafistolée mais bon ca peut marcher.

Bon désolé j'ai pas trop le temps de chercher mais bon je voulais donner une piste, je pense que quelqu'un d'autre aura une meilleur solution.
0
Jessy
 
Rectification :

$tab[0] = "moi@eee.fr"
$tab[1] = "100"
$tab[2] = "Proul"
$tab[3] = "Michel"
0
Jessy
 
Rectification n°2 :

Bien sur il faut faire un for each de ton $query et seulement dedans faire $tab = $query[0].split(',');
;
0
Jessy
 
Bon en te relisant j'ai une question.
Ton pris, c'est un champ bien distinct dans ta base ?
0
sisi
 
Tout d'abord merci pour ton aide.

Voici ma table :
CREATE TABLE IF NOT EXISTS 'data' ( 
  'id' int(11) NOT NULL auto_increment, 
  'fieldid' int(11) default NULL, 
  'data_txt' text, 
  'data_bool' tinyint(1) default NULL, 
  'data_int' int(20) default '0', 
  'data_float' float default '0', 
  'data_char' varchar(255) NOT NULL, 
  'itemid' int(11) default NULL, 
  'expiration' datetime default NULL, 
  PRIMARY KEY  ('id'), 
  KEY 'itemid' ('itemid') 
) 


Le prix est contenu dans data_txt au même titre que toute autre informations.
Afin de pouvoir le retrouver, c'est le fieldid 16.

Quand j'affiche le résultat de la requete en php, la seule séparation est un espace ...

Ce que je 'aimerais c'est faire le tri directement dans la requete
0