clause WHERE sans nommer le champ - SQL/NoSQL - Programmation
Marsh Posté le 08-11-2006 à 14:14:46
Code :
|
J'ai gagné ?
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 :
|
devienne :
Code :
|
et non pas :
Code :
|
et c pas possible.. à cause de cet ereg_replace inévitable... donc je voulais un moyen différent de faire cette requete
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)
Marsh Posté le 08-11-2006 à 14:22:04
je connais pas cette syntaxe.. comment je mets mon WHERE là ?
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 ?
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";
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 :
|
devient
Code :
|
ç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 ), mais je change pas d'avis
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 !
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
Marsh Posté le 08-11-2006 à 15:34:08
ReplyMarsh Posté le 08-11-2006 à 15:35:26
disons que l'idée est bonne... qu'à l'utilisation... ya des petits trucs pas clairs
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.
Marsh Posté le 09-11-2006 à 16:03:20
|
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
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.
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
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 !
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.
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