select multiple et clause where ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : select multiple et clause where ?

par Steffy » 10 févr. 2006, 17:14

merveilleux :) encore merci

par Ryle » 10 févr. 2006, 17:07

Hum... p'tite erreur dans le if, c'est lorsque l'on ne trouve pas le any dans le tableau qu'il faut ajouter le where ;)
$sql = "SELECT ... FROM maTable"; 
if( ! in_array("any", $nomDuSelect) )
   $sql.= " WHERE $condition";

par Ryle » 10 févr. 2006, 17:05

Le plus simple, si jamais la valeur du select est "any" (ou si l'une des valeur sélectionnée est "any"), c'est de ne pas mettre la condition where :)
$sql = "SELECT ... FROM maTable";
if(in_array("any", $nomDuSelect)
  $sql.= " WHERE $condition";

par Steffy » 10 févr. 2006, 16:53

Désolé c'est encore moi :oops:

J'ai mi en place la solution de ryle qui fonctionne très bien...
foreach($country as $pays) { 
if ($condition != "") $condition.=" OR "; 
$condition.= "field_2='$pays'";
}
par contre dans mon select j'aimerais mettre la possibilté de ne pas choisir de pays...

Code : Tout sélectionner

<option value="any" selected>Any</option>
je voudrais donc renvoyer une requete du genre WHERE field !=''

j'ai essayer cette chose

foreach($country as $pays) { 
if ($condition != "") $condition.=" OR "; 
$condition.= "field_2='$pays'";
if ($condition == "field_2='any'") 
$condition.= "field_2!='$pays'";
}
mais ca m'envois cette requete ci => field_2='any'field_2!='any'

et si je fais tel que :
foreach($country as $pays) { 
if ($condition != "") $condition.=" OR "; 
$condition.= "field_2='$pays'";
if ($condition == "field_2='any'") $condition.=" OR "; 
$condition.= "field_2!='$pays'";
}
ca m'envois field_2='any' OR field_2!='any'

cette requete fonctionne sauf que ca casse la requete si je selectionne un pays.

Encore une tite aide s'il vous plait ? Merci

par Steffy » 10 févr. 2006, 15:10

Je vous remerci bien bas ! Le souci est résolu grace à vous :)

par Ryle » 10 févr. 2006, 12:51

Tu peux rassembler tous tes critères dans un IN : WHERE field IN ('fr', 'jap', ...)

Cela équivaut à WHERE field='fr' OR field='jap' OR ...
$condition = ""
foreach($nomDuSelect as $pays) {
 if ($condition != "") $condition.=", "; // ajout du séparateur, tu peux aussi bien mettre le OR ici
 $condition.= "'$pays'"; // de la même manière tu peux mettre field='$pays'
}

$sql = "SELECT ... WHERE field IN ($condition)"; 
// ou "SELECT ... WHERE $condition"; si tu optes pour les OR :)

par Cyrano » 10 févr. 2006, 12:49

Il faut contruire ta chaine avec un implode() :
<?php
$country  = $ibforums->input['country'];

//voilà ce que je propose
foreach($country as $choix)
{
    /* Modification de chaque valeur du tableau de pays en ajoutant "field2=" */
    $country[$choix] = "field2='". $choix ."'";
}
/* Création de la chaine de la clause WHERE en insérant un " OR " entre chaque clause de choix de pays */
$reqp = implode(" OR ", $country);

$DB->simple_construct( array( "select" => "count(member_id) AS result",
                              "from"   => "pfields_content",
                              "where"  => $reqp ) );

$DB->simple_exec();
?>
Résultat, si tu as trois pays, par exemple france, belgique et espagne, la chaine produite ressemblera à :

Code : Tout sélectionner

field2='france' OR field2='belgique' OR field2='espagne'

select multiple et clause where ?

par Steffy » 10 févr. 2006, 12:36

Bonjour tout le monde, je viens à la rescousse pour vous demandez une idée. Je cherche à faire une requete ou la clause WHERE serait en fonction des choix d'un select multiple.

par exemple j'ai un tableau comme celui-ci

Code : Tout sélectionner

<select name='country[]' class='dropdown' multiple='multiple' size='15'> <option value='fra'>France</option> <option value='jap'>Japan</option> <option value='aus'>Australia</option> <option value='Unite'>United States</option> </select>
Je récupere mon tableau ainsi...
$country  = $ibforums->input['country'];

//voilà ce que j'ai essayer

foreach($country as $choix)
{
$reqp = "field2=$choix";
}

$DB->simple_construct( array( 'select' => 'count(member_id) AS result',
									  'from'   => 'pfields_content',
									  'where'  => "$reqp" ) );
		
$DB->simple_exec();
Le souci c'est que de cette maniére il m'execute les requêtes une par une... alors que j'aimerais qu'ils fasse une requete en fonction de tous les choix en même temps.
Exemple j'aimerais ma requête sois : 'where' => "field2 = fr OR field2 = jap"

J'ai essayer de faire un count($country) d'abord et d'utiliser "for" ensuite mais je ne m'en suis pas sorti...

Si quelqu'un avait la bonté de pouvoir m'aiguiller

Merci :)