comment appliquer des filtres successifs sur une base de donnée

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 : comment appliquer des filtres successifs sur une base de donnée

par Berzemus » 29 avr. 2009, 09:26

C'est Green !

Zut, j'aurais du mettre un © tiens..

http://www.phpfrance.com/forums/voir_su ... -green.php :twisted:

par D4Y » 29 avr. 2009, 08:49

super cette façon de faire avec l'implode !
Je vais y penser pour la prochaine fois ! ;)

Merci

par albat » 28 avr. 2009, 22:05

Ah, le implode() est très élégant, j'aime beaucoup aussi. =D>

Finalement, je suis passé par l'approche SQL et toi, par l'approche PHP.

Ça vaudrait le coup de faire un benchmark pour voir si ç'a un impact en termes de performances, non ?

par Ryle » 28 avr. 2009, 21:58

Ben alors, Ryle ? Ne me dis pas que tu ne la connaissais pas ! :shock:
Si, si, je connaissais, mais ça me donne des boutons de voir passer des 1=1 dans des requêtes sql... (c'est comme si tu me sortais un if (true === true), voire quand je dois faire des checked="checked" mais celui là, on peut malheureusement pas y faire grand chose... longue vie au html ! ;))

Donc moi, mon truc infaillible et qui donne pas de boutons aux dba, c'est de construire ma requête proprement ;)

En plus, s'il n'y a que des AND, on peut le faire très simplement avec un tableau et un implode :
$tabConditions = array();
if (condition1)
  $tabConditions[] = ' champ = $valeur ';
...

if (count($tabConditions) > 0)
  $sql. = ' WHERE ' . implode(' AND ', $tabConditions);
Le résultat sera le même, mais je trouve ça plus propre :)

par sylvaing26 » 28 avr. 2009, 20:49

Vous pouvez envoyer vos dons à mon fan club... :langue:
1 fan (de plus ?) !

par albat » 28 avr. 2009, 19:16

Modération :
gandahar, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par albat » 28 avr. 2009, 19:01

Vous pouvez envoyer vos dons à mon fan club... :langue:

par sylvaing26 » 28 avr. 2009, 18:59

$sql = "SELECT ... FROM ... WHERE 1=1";
if ( .... ) 
  $sql.= " AND ... "
if ( .... ) 
  $sql.= " AND ... "
Ben alors, Ryle ? Ne me dis pas que tu ne la connaissais pas ! :shock:
Rolala mais oui !!! Perso j'aurai jamais pensé à ca !! Ya des rusés parmis nous ! :wink:

par albat » 28 avr. 2009, 18:30

$sql = "SELECT ... FROM ... ";
if ( .... ) 
  $sql.= " WHERE ... "
if ( .... ) 
  $sql.= " AND ... "
La petite difficulté étant seulement d'identifier quand est-ce qu'il faut mettre un where et quand est-ce qu'il faut mettre un and, si jamais la 3ème condition est renseignée, mais pas la premiere :)
Pour contourner cette difficulté, l'astuce suivante est infaillible :
$sql = "SELECT ... FROM ... WHERE 1=1";
if ( .... ) 
  $sql.= " AND ... "
if ( .... ) 
  $sql.= " AND ... "
Ben alors, Ryle ? Ne me dis pas que tu ne la connaissais pas ! :shock:

par AB » 28 avr. 2009, 18:27

$cuisinea n'est peut-être pas défini...
if (isset($cuisinea) && $cuisinea == 0) {

}
Mais tu ne suis pas les exemples ci-dessus pour concaténer tes chaines
$chaine = '';
$chaine .= 'chiens';
$chaine .= ' et ';
$chaine .= 'chats';

echo $chaine;

par gandahar » 28 avr. 2009, 15:23

merci beaucoup pour cet exemple,

je vais tester Ça de suite
:D

EDIT :

jai adapté le code, mais jai un parse error, impossible de savoir ce qui ne va pas, jai testé le point virgule, les guillemets, bref, je bloque

voici le bout de code qui bloque,
if ( $cuisinea == 0 ) {    //c'est cette ligne qui est designée par le parse error !

   $where=$where;

}

else {

    if ($where='') {
      $where=$where.'idtipococina='.$cuisinea;
    }

    else {
      $where=$where.' and idtipococina='.$cuisinea;
    }

}
help please :cry:

par D4Y » 28 avr. 2009, 15:18


$where = "";
if($typea != "" ||  $typeb != "" || $localisationa != "" || $localisationb != "")
{
$where .= "WHERE";
  
if($typea != "")
{
$where .= " typeA = ''".$typea."";
}

if($typea != "" &&  ($typeb != "" || $localisationa != "" || $localisationb != ""))
{
$where .= " AND ";
}

if($typeb != "")
{
$where .= " typeB = ''".$typeb."";
}

// et aini de suite....


}


mysql_query("SELECT * FROM matable ".$where."");

par gandahar » 28 avr. 2009, 15:10

je comprend le concept mais pourriez-vous me donner un exemple concret svp ? ainsi je pourrais modifier et adapter car j'ai encore un peu de mal a composer de toute piece un code aussi complexe

merci

par Ryle » 28 avr. 2009, 15:05

La requête SQL n'est qu'une simple chaine de caractères pour php... il te suffit donc de construire la requête que tu souhaites exécuter en fonction des paramètres dont tu disposes...
$sql = "SELECT ... FROM ... ";
if ( .... ) 
  $sql.= " WHERE ... "
if ( .... ) 
  $sql.= " AND ... "
La petite difficulté étant seulement d'identifier quand est-ce qu'il faut mettre un where et quand est-ce qu'il faut mettre un and, si jamais la 3ème condition est renseignée, mais pas la premiere :)

par gandahar » 28 avr. 2009, 14:56

:D oui effectivement, ca simplifie enormement les choses, :lol: je me sent comme soulagé
je me voyais deja en train de créer un gros code... argh
merci beaucoup, je vais tester Ça.

mais je viens de realiser que si un des filtre n'est pas activé, comme puis-je dynamiquement modifier la requete pour n'integrer que les filtres selectionnés ??


a bientôt

merci pour cette reponse si rapide :wink: