Requete MySQL avec condition globale

Requete MySQL avec condition globale - SQL/NoSQL - Programmation

Marsh Posté le 04-02-2010 à 19:55:27    

Bonjour,
 
Je souhaiterai créer une requête MySQl du type:
 
'SELECT * FROM champ WHERE machin =' . $condition
 
Je voudrais que la variable $condition puisse prendre toutes les valeurs présente dans le champ machin dans certains cas.
J'ai donc essayé de lui attribuer une valeur joker du type * ou %, mais ça ne passe pas.
 
Je pense que je m'y prend mal, mais je ne vois pas comment faire...
 
Merci de votre aide.

Reply

Marsh Posté le 04-02-2010 à 19:55:27   

Reply

Marsh Posté le 04-02-2010 à 20:44:32    

donc en fait, dans certains cas, tu voudrais juste fair eun SELECT * FROM champ  
 
c'est ça ?


---------------

Reply

Marsh Posté le 04-02-2010 à 21:09:24    

Oui au final c'est bien ça sauf que j'ai d'autres conditions.
En fait j'ai trouvé un moyen:
 
'SELECT * FROM champ WHERE machin LIKE $condition
 
où $condition= '%'

Reply

Marsh Posté le 04-02-2010 à 21:11:40    

et si tu ne mettais pas de condition dans ce cas ?


---------------

Reply

Marsh Posté le 04-02-2010 à 22:32:24    

oui mais c'est une fonction qui est appelée donc parfois j'ai une condition et d'autres fois non...
Je ne sais pas comment le gérer autrement...

Reply

Marsh Posté le 04-02-2010 à 23:47:20    

C'est pas forcément une mauvaise chose. De toute façon, l'optimiseur de requête prendra les mesures nécessaires :)

Reply

Marsh Posté le 05-02-2010 à 10:50:43    

Ben suffit de faire un test si y'a besoin de mettre la condition ou pas.  

Code :
  1. $condition = '';
  2. if (Le test qui va bien) {
  3.   $condition = 'Where machin = '.$Valeur;
  4. }
  5. $Sql = "SELECT * FROM champ $condition";


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-02-2010 à 15:17:20    

bon la syntaxe est pas forcement correct au niveau des apostrophe et quote mais voila l idée
 
if(le test){
$condition ="and machin='$filtre'";
}else{
$condition='';
}
 
$sql="select * from champ where 1=1 '$condition'";
 
ca marchera qu'il y ai une condition ou non.
le $condition serait dans ton cas le retour de ta fonction

Message cité 1 fois
Message édité par d@kn1ko le 06-02-2010 à 15:24:44
Reply

Marsh Posté le 08-02-2010 à 11:11:42    

d@kn1ko a écrit :

bon la syntaxe est pas forcement correct au niveau des apostrophe et quote mais voila l idée
 
if(le test){
$condition ="and machin='$filtre'";
}else{
$condition='';
}
 
$sql="select * from champ where 1=1 '$condition'";
 
ca marchera qu'il y ai une condition ou non.
le $condition serait dans ton cas le retour de ta fonction


 
Ca revient exactement au même que le code que j'ai proposé précédemment :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-02-2010 à 11:23:41    

Oui, sauf que la syntaxe est plus modulaire et te permet d'enchainer les conditions (en concatenant des and dans tous les cas) sans te demander si tu as deja ecrit le where ou non. Une autre solution plus elegante consiste a utiliser une variable 'separateur' comme suit :

Code :
  1. $separateur = 'where ';
  2. $condition = '';
  3. if(le test 1) {
  4.    $condition .= $separateur;
  5.    $condition .= "machin=$filtre1";
  6.    $separateur = 'and ';
  7. }
  8. if(le test 2) {
  9.    $condition .= $separateur;
  10.    $condition .= "machin=$filtre2";
  11.    $separateur = 'and ';
  12. }
  13. $sql = "select * from champ $condition";


Message édité par fred777888999 le 08-02-2010 à 11:24:05
Reply

Marsh Posté le 08-02-2010 à 11:23:41   

Reply

Marsh Posté le 08-02-2010 à 19:26:55    

Merci de vos réponses!
J'ai un peu laissé tomber cette partie pour l'instant j'y reviendrai certainement plus tard.
JE vais voir pour la solution par le test.

Reply

Sujets relatifs:

Leave a Replay

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