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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  clause WHERE sans nommer le champ

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

clause WHERE sans nommer le champ

n°1472248
freed102
Arayashiki
Posté le 08-11-2006 à 14:12:33  profilanswer
 

bonjour,
 
y a til un moyen de faire un select avec une clause WHERE sans nommer le champ ?
 
je vous explique mon probleme :
j'ai fait une requete basique :
 
$query_sz="select * from ewb_boutique where bo_bl_id=bl_id";
 
 
jusque là tout va bien...
sauf que le moteur que ma boite utilise faire un rechercher remplacer de plusieurs mots clefs dans le texte et remplace ces mots par des valeurs dynamiques...
 
dans mon cas... il va remplacer le mot bl_id par 1119
 
et donc transforme ma requete en :
 
$query_sz="select * from ewb_boutique where bo_1119=1119";
 
 
... vous comprendrez bien que ça ne fonctionne pas ainsi ! alors je voudrais squeezer ça par un autre moyen... un WHERE qui cherche le champ par sa position (row) plutot que par son nom ?
 
Merci d'avance
 
Freed

mood
Publicité
Posté le 08-11-2006 à 14:12:33  profilanswer
 

n°1472249
FlorentG
Unité de Masse
Posté le 08-11-2006 à 14:14:46  profilanswer
 

Code :
  1. $query_sz = 'SELECT * FROM ewb_boutique WHERE bo_' . $id . ' = ' . $id;


J'ai gagné ?
 

n°1472251
freed102
Arayashiki
Posté le 08-11-2006 à 14:17:26  profilanswer
 

non pas gagné puisque je veux que mon bo_bl_id reste bo_bl_id ... mais dans le moteur de ma boite, il y a un ereg_replace qui va remplacer certains mots... donc le bl_id (qui va prendre une valeur numérique)... et mon champ s'appelle bo_bl_id... donc dans l'ereg_replace il va etre renomé egalement ! et c pas bieeennn !
 
en quelques mots je veux que ma requete :

Code :
  1. $query_sz="select * from ewb_boutique where bo_bl_id=bl_id";


 
devienne :

Code :
  1. $query_sz="select * from ewb_boutique where bo_bl_id=1119";


 
et non pas :

Code :
  1. $query_sz="select * from ewb_boutique where bo_1119=1119";


 
et c pas possible.. à cause de cet ereg_replace inévitable... donc je voulais un moyen différent de faire cette requete


Message édité par freed102 le 08-11-2006 à 14:20:56
n°1472252
chani_t
From Dune
Posté le 08-11-2006 à 14:21:15  profilanswer
 

et un  
 
SELECT * FROM ewb_boutique[nro_row]
 
nan... (j'ai pas vérifié l'éxactitude hein)

n°1472253
freed102
Arayashiki
Posté le 08-11-2006 à 14:22:04  profilanswer
 

je connais pas cette syntaxe.. comment je mets mon WHERE là ?

n°1472256
freed102
Arayashiki
Posté le 08-11-2006 à 14:28:28  profilanswer
 

je viens de trouver un truc dans ce genre là mais ça ne marche pas :
 
select * from ewb_boutique where ROW(14, bl_id)
 
 
... peut etre on peut me corriger ?


Message édité par freed102 le 08-11-2006 à 14:28:43
n°1472263
freed102
Arayashiki
Posté le 08-11-2006 à 14:39:44  profilanswer
 

j'ai trouvé un moyen de squeezer le ereg_replace :
j'ai mis le nom du champ en majuscules.. du coup l'ereg_replace ne remplace pas le nom du champ.. et heureusement MySQL n'est pas case sensitive
 
ça donne ça :
 
$query_sz="select * from ewb_boutique where BO_BL_ID=bl_id";

n°1472269
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-11-2006 à 14:47:18  profilanswer
 

huuum ça sent le moteur "collecteur" ton truc.
Si j'ai tout compris, le dit moteur parse tout les sql avant des les executer et remplace certains mots clés par une valeur arbitraire ( ou dépend du contexte on s'en fout).
Exemple: le moteur remplace fruits par 18 la requête:

Code :
  1. select * from fruits where fruits_id = 12


devient

Code :
  1. select * from 18 where 12_id = 12


ça m'a l'air d'être de qualitaÿ comme truc.
 
J'imagine bien que tu peux pas te passer de cette merveilleuse invention, mais qui a eu l'idée de nommer les champs de la base. Nan parce qu'en sachant les caractéristiques du truc, le plus simple aurrait été d'éviter d'utiliser des "mots clés" dans les noms de champs/de base.
 
Maintenant j'imagine egalement qu'il est trop tard pour faire un alter et changer les noms des champs sans tout recoder.
Mais du coup, faire un sql avec un where sur un champs sans nommer le champs ça va pas être facile.  
Seul truc que je vois, virer le where et faire son equivalent en php(si c'est bien ça que tu utilises).
 
Conclusion: A mon avis, d'ici une semaine ou deux tu tiendras un bon article pour le "daily WTF"
 
edit: burned de 10 minutes, tu as trouvé une solution magnifique( à la hauteur du reste quoi [:dawa]), mais je change pas d'avis


Message édité par anapajari le 08-11-2006 à 14:48:18
n°1472290
freed102
Arayashiki
Posté le 08-11-2006 à 15:00:12  profilanswer
 

en fait c plus compliqué que ça... il s'agit d'un CMS "homemade"...  
il propose donc d'inserer du contenu de façon assez simple.. juste un champ de texte wysiwyg... et quelques mots clef pour gerer les choses plus ou moins dynamiques (comme les noms des pages, des liens dynamiques, des images, des textes, des listes etc etc...) on peut (et fort heureusement !) y inserer du PHP, en général ça ne pose pas de probleme de mettre du PHP, en général les mots clefs sont bien spécifiques. mais en général on y insere pas de requetes SQL, et là j'en avais besoin.. donc prob car les noms des champs de la table ressemblent bcp aux mots clefs, maintenant si j'avais été celui qui a créé ce CMS, j'aurai "balisé" les mots clefs du genre [bl_id] plutot que bl_id tout court !

n°1472294
FlorentG
Unité de Masse
Posté le 08-11-2006 à 15:01:40  profilanswer
 

Ca m'a l'air louche tout ça

mood
Publicité
Posté le 08-11-2006 à 15:01:40  profilanswer
 

n°1472304
freed102
Arayashiki
Posté le 08-11-2006 à 15:09:02  profilanswer
 

c'est pas louche... un exemple.... pour générer une liste on mets dans le modele :
 
<h1>champ_titre1</h1>
<img src="champ_image1" />
<p>champ_texte1<p>
 
 
et le CMS va donc interroger la base, il va boucler sur le modele indiqué et remplacer les mots clefs par des valeurs ce qui donnera :
 
 
<h1>Mon premier titre</h1>
<img src="image1.jpg" />
<p>Voici mon premier texte !<p>
 
<h1>Mon second titre </h1>
<img src="image2.jpg" />
<p>Voici mon second texte !<p>
 
<h1>et voila le troisieme titre</h1>
<img src="image3.jpg" />
<p>c'est pratique pour générer des listes à la volée !<p>
 
 
et ainsi de suite !
 
le client à juste à remplir un formulaire pour alimenter la base.. et la page se construit toute seule en fonction du modele qu'on lui donne, et il remplace les mots clefs par des valeurs
 
L'idée c'est de pouvoir imbriquer tout type d'outils de ce genre pour générer des pages, on a des blocs dans la page.. chaque bloc est un outil, on y affiche un agenda, une liste, un formulaire, une annonce, un menu.. au choix.. tout ça sur la même page si on le souhaite... pas besoin d'etre un pro en HTML tout se créé tout seul.
 
... pour info ce systeme est utilisé par des sites assez importants depuis des années, donc je suppose qu'il a fait ses preuves.. moi je l'utilise depuis deux mois, j'ai encore du mal à y retrouver mes petits... mais effectivement pour le client c'est facile à utiliser.. pour le developpeur bah... faut toujours adapter le systemes aux besoins du client


Message édité par freed102 le 08-11-2006 à 15:13:34
n°1472325
noldor
Rockn'roll
Posté le 08-11-2006 à 15:34:08  profilanswer
 

ça sent la conception pourrie quand même


---------------
http://runnerstats.net
n°1472329
freed102
Arayashiki
Posté le 08-11-2006 à 15:35:26  profilanswer
 

disons que l'idée est bonne... qu'à l'utilisation... ya des petits trucs pas clairs

n°1472333
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-11-2006 à 15:39:25  profilanswer
 

bof, je trouve surtout que ça sent les "fonctionnalités rajoutées" sur un outil qu'avait pas été pensé pour au debut.

n°1472942
freed102
Arayashiki
Posté le 09-11-2006 à 13:51:14  profilanswer
 

il doit y avoir un peu de ça aussi !

n°1473075
MagicBuzz
Posté le 09-11-2006 à 16:03:20  profilanswer
 


$id = 'bl_'.'id';
$query_sz = 'SELECT * FROM ewb_boutique WHERE bo_'.$id.' = bl_id';


 
:spamafote:
 
 
autre solution :
 
dans le replace, vérifier que le caractère avant "bo_id" est un caractère invisible ou un "
 
là ça marche à tout les coup, et c'est propre :spamafote:

n°1473079
MagicBuzz
Posté le 09-11-2006 à 16:06:44  profilanswer
 

sinon, euh...
 
pourquoi ne pas travailler proprement, intelligement, c'est à dire pas comme un infâme goret ?
 
pourquoi ne pas utiliser des requêtes paramétrées avec des paramètres nommés ?
 
genre ?
 
à la base, ça fait pareil, sauf que c'est propre, ça sent pas mauvais, ça fait pas de la salade de fruits aux rognons de boeuf, et en plus c'est rapide.


Message édité par MagicBuzz le 09-11-2006 à 16:07:14
n°1473138
freed102
Arayashiki
Posté le 09-11-2006 à 17:18:58  profilanswer
 

bah malheureusement.. j'ai aps le choix !

n°1473149
MagicBuzz
Posté le 09-11-2006 à 17:34:53  profilanswer
 

après tout, c'est vrai que c'est peut-être pas mauvais la salade de fruits aux rognons de boeuf, c'est toujours mieux que rien :o

n°1473153
freed102
Arayashiki
Posté le 09-11-2006 à 17:37:20  profilanswer
 

bah ça fait 3 ans qu'ils bossent comme ça.. moi je suis arrivé ya 2 mois.. je veux bien m'imposer mais ...tout de même !

n°1473155
MagicBuzz
Posté le 09-11-2006 à 17:39:29  profilanswer
 

ben là c'est une bonne occasion. d'autant que passer à des requetes paramétrées, ça change pas grand chose au source. sauf que l'intérêt, c'est que tes requêtes ne seront plus illisibles, et surtout, ça permettra d'éviter ce problème de façon sûre.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  clause WHERE sans nommer le champ

 

Sujets relatifs
[MySql) Faire un where sur un champs liste de valeursRemplir le champ d'un formulaire par une variable
[HTML]bordure champ texte[xml xslt] récupérer la valeur d'un champ externe à celui du contexte
WHERE '20710012541' LIKE concat(code,'%')[VBA] Nommer un classeur après sa création
Eliminer doublons d'une table avec condition sur un champAfficher un champ d'un etat sous condition
control d'edition ...group by sur un champ contenant des valeurs null sous oracle
Plus de sujets relatifs à : clause WHERE sans nommer le champ


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