php-mysql c pas possible les sous-requetes ? - PHP - Programmation
Marsh Posté le 31-01-2003 à 10:40:08
il me semble que les sous requêtes ne sont supportées qu'à partir du dernier mysql (sorti il y a qques jours je crois).
edit: cf http://forum.hardware.fr/forum2.ph [...] subcat=395
Marsh Posté le 31-01-2003 à 11:37:12
arf ca c bon a savoir
Hao pq mets tu where 1
je trouves ca inutile meme si il le mette ds phpmyadmin
Marsh Posté le 01-02-2003 à 09:32:24
@weed:
le but de cette requete, c qu'elle se construise au fur et a mesure.
donc au debut "select.....where 1"
et puis apres: requete=requete." and nom like \"toto\"";
par exemple.et ainsi de suite
Marsh Posté le 01-02-2003 à 22:20:12
merci Hao pour mais en fait je connais les sous interrogations et les jointures simple, auto et .....
ma question est pourquoi tu fais comme phpmyadmin qui met a chaque fois un where 1 ce qui est inutile pour moi ...
select nMembre from membre where nMembre in( select nMembre from encadre);
sinon ds ta requete étant tres longue tu n'oses pas trop faire une jointure, bizzare ms c vrai que l'on m'a dit que le must etait de faire des sous interrogation chose car plus puissant que les jointures ms j'aime pas trop ....
dc en fait cela comfirme ce que j'ai entendu, c un peu plus court en sous interrogation ....
Marsh Posté le 03-02-2003 à 15:35:22
bon, pour résumer voila un morceau du code, essaie de voir ce que ca donnerait sans 'where 1' :
$requete = "select * from membre where 1";
if($anneeArrivee != null)
$requete = $requete." and anneeArrivee = \"$anneeArrivee\"";
if($nom != null)
$requete = $requete." and nom like \"%$nom%\"";
if($prenom != null)
$requete = $requete." and prenom like \"%$prenom\"%";
if($age != null)
$requete = $requete." and age = \"$age\"";
if($adresse != null)
$requete = $requete." and adresse like \"%$adresse%\"";
etc.....
Marsh Posté le 04-02-2003 à 10:28:17
je ne comprends pas trop stript
je repose ma question qu'est que ca change un where 1
parce que la clause WHERE permet de faire une selection
c tt du moins ce que j'ai appris
Marsh Posté le 04-02-2003 à 11:09:23
weed a écrit : je ne comprends pas trop stript |
si tu ne rentres dans aucun if, tu as qd même une requête valide et réciproquement, si tu rentres dans un if (n'importe lequel) tu as aussi une requête valide
Marsh Posté le 04-02-2003 à 12:39:34
c le mot d'ordre SELECT qui fait la selection
where est la pour imposer des contraintees sur les resultats du select
and ca fait pareil, ca rajoute des conditions, mais faut avaoir fait un where avant
reprend le code du dessus sans le where et essaie devierses possiblites, tu verras ca marchera jamais
Marsh Posté le 04-02-2003 à 13:28:53
Heu, un exemple sans "where=1" !
Et qui permet d'ajouter des champs sans recopier des lignes de codes qui font la même chose
Code :
|
C'est un exemple, hein.
A adapter si besoin...
Marsh Posté le 04-02-2003 à 13:55:12
deja qu'en php le code c le bordel, je trouve que ca alourdit pas mal. sinon ca marche, mais ca revient au meme
Marsh Posté le 04-02-2003 à 15:11:45
Arrête tout de suite le PHP
Marsh Posté le 04-02-2003 à 17:12:16
les pages qui font 3k lignes, avec du html a printer dedans qui donne un truc super mal indenté c qd meme UN PEU plus le bordel qu'un truc oo...
Marsh Posté le 04-02-2003 à 17:26:26
c'est pas parce que tu fais du php que t'es obligé de bosser comme un porc hein..
eh puis rien ne t'empêche de faire ton php en objet
Marsh Posté le 04-02-2003 à 17:54:29
Hao a écrit : |
Tiens, voilà un bout de code en cous de dev.
C'est une méthode d'un objet qui sert à gérer des requêtes quasiement créés dynamiquement par l'utilisateur.
Code :
|
Marsh Posté le 04-02-2003 à 23:35:24
Mara's dad
je suis un peu curieux, ms ne m'en veux pas, je suis pas tres bon en PHP je connais assez bien la POO avec le C++
tu parles de methoses, ms la tu n'as pas encore construits ta classe, si je me trompes pas ???
et en 3 mots ce morceaux que te permet t'il ??? esplique moi avec un exemple pour que ce soit plus facile à m'expliquer ...
Marsh Posté le 05-02-2003 à 01:41:02
C'est une méthode isolée, sortie de son contexte...
Justement, la classe en question (qu'on ne voit pas dans ce court extrait) sert à stocker le contexte d'une page.
Dans ce contexte, on trouve des requetes SQL qui sont composées d'un corp (select blabla...from...), de critères (les clauses du where, et d'ordres de tri pour l'ORDRE BY.
Certain critères peuvent être modifiés par l'utilisateur pour affiner sa recherche, certains sont obligatoires, d'autres non...
Pareil pour les ordres de tri.
La méthode présentée permet de reconstruire les requêtes à partir des élements de description (corp, critères, tris) et des données du contexte stocké en session. ( Les données viennent d'un formulaire. Elles sont controlées avant d'être stockées en cession dans des contextes )
Sur le formualire présenté à l'utilisateur, il y a une liste des champs sur lesquels il peux faire des sélections et ou des tris.
En fonction du type de donnée de chaque champ, les opérateurs de comparaisons possibles sont présentés dans des listes déroulantes. Le tableau $aOperateurs sert à constituer les partie des clauses where en fonction des types de champs et de l'opérateur choisi.
Ce bout de code n'est qu'une infime partie d'un moteur qui génère des pages à partir d'une description XML des objets à afficher (champ, liste, sélecteur de donnée, images, textes...).
Les données sont lue (en XML) à partir de bases Oracle ou PostgreSql et fusionnées avec des XSL pour générer au choix des pages web ou des éditions PDF.
Tout çà pour montrer que la génération de requête dynamiques n'impose pas de mettre des "where 1" à tout bout de champs, même sur un projet important illustré par le bout de code :
Code :
|
En fait, on a le même problème pour la clause 'ORDER BY'
Comment fait Hao pour mettre un 'ORDRE BY' par défaut s'il en propose qui sont facultatifs ?
Surtout qu'il peut aussi être intéressant de laisser l'itilisateur choisir l'odre d'application des ordres de tri
Code :
|
A+
Marsh Posté le 31-01-2003 à 10:00:22
bonjour a tous,
j'ai un pb avec une requete:
select nMembre from membre where 1 and nMembre in( select nMembre from encadre where 1);
ne me dites pas qu'on peut faire ca avec une jointure simple, la requete est bcp plus longue, mais c le coup du ...in(select... qui marche pas.