clause WHERE sans nommer le champ

clause WHERE sans nommer le champ - SQL/NoSQL - Programmation

Marsh Posté le 08-11-2006 à 14:12:33    

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

Reply

Marsh Posté le 08-11-2006 à 14:12:33   

Reply

Marsh Posté le 08-11-2006 à 14:14:46    

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


J'ai gagné ?
 

Reply

Marsh Posté le 08-11-2006 à 14:17:26    

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
Reply

Marsh Posté le 08-11-2006 à 14:21:15    

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

Reply

Marsh Posté le 08-11-2006 à 14:22:04    

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

Reply

Marsh Posté le 08-11-2006 à 14:28:28    

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
Reply

Marsh Posté le 08-11-2006 à 14:39:44    

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

Reply

Marsh Posté le 08-11-2006 à 14:47:18    

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
Reply

Marsh Posté le 08-11-2006 à 15:00:12    

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 !

Reply

Marsh Posté le 08-11-2006 à 15:01:40    

Ca m'a l'air louche tout ça

Reply

Marsh Posté le 08-11-2006 à 15:01:40   

Reply

Marsh Posté le 08-11-2006 à 15:09:02    

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
Reply

Marsh Posté le 08-11-2006 à 15:34:08    

ça sent la conception pourrie quand même


---------------
http://runnerstats.net
Reply

Marsh Posté le 08-11-2006 à 15:35:26    

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

Reply

Marsh Posté le 08-11-2006 à 15:39:25    

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

Reply

Marsh Posté le 09-11-2006 à 13:51:14    

il doit y avoir un peu de ça aussi !

Reply

Marsh Posté le 09-11-2006 à 16:03:20    


$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:

Reply

Marsh Posté le 09-11-2006 à 16:06:44    

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
Reply

Marsh Posté le 09-11-2006 à 17:18:58    

bah malheureusement.. j'ai aps le choix !

Reply

Marsh Posté le 09-11-2006 à 17:34:53    

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

Reply

Marsh Posté le 09-11-2006 à 17:37:20    

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 !

Reply

Marsh Posté le 09-11-2006 à 17:39:29    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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