PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 14-02-2011 12:25:08

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Filtrage avec une clause WHERE

Bonjour,

Je fais une requête classique :

[code mysql]
SELECT
*
FROM
ma_table
[/code]

A partir d'un formulaire, je voudrais pouvoir composer une requète qui prenne en compte un ou deux paramètres (ou plus).
Je peux donc suivant le cas formuler deux autres requètes :

[code mysql]
SELECT
*
FROM
ma_table
WHERE
condition_1
[/code]

et

[code mysql]
SELECT
*
FROM
ma_table
WHERE
condition_1
AND
condition_2
[/code]

Comment faire pour ne pas avoir une succession de tests avant d'arriver à la bonne requète ?
[code php]
<?php
if(conditions_pour_1_et_2){
requete_1_2
}
elseif(conditions_pour_1){
requete_1
}
elseif(conditions_pour_2){
requete_2
}
else{
requete_0
}
[/code]
Merci.

Dernière modification par moijhd (14-02-2011 12:27:20)

Hors ligne

#2 14-02-2011 12:42:47

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Filtrage avec une clause WHERE

On peut faire cela avec de la construction de chaîne. smile

$query = "SELECT * FROM table";
$where = "";
if(condition_1)
  $where .= (empty($where))? " WHERE condition_1" : " AND condition_1";
if(condition_2)
  $where .= (empty($where))? " WHERE condition_2" : " AND condition_2";
$query .= $where;

Hors ligne

#3 14-02-2011 12:47:09

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

On réduit l'écriture mais (même si je ne sais pas vraiment si c'est embetant) on garde la même structure.

Je pourrais reformuler : est-ce que je peux n'avoir qu'une seule requète avec des "conditions vides" par exemple ?

Hors ligne

#4 14-02-2011 12:52:58

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Filtrage avec une clause WHERE

A ma connaissance il n'y a pas mieux que ce que je t'ai proposé pour former une requête dynamiquement.
Mais après je peux ne pas comprendre ce que tu désires réellement.
Pourrais-tu détailler ce que tu veux ?

Car une requête préformatée avec des conditions à remplir cela stipule que tu connais le nombre de conditions et donc il n'y a aucun test à faire normalement. Or c'est complètement contraire au code que tu nous présentes en premier post.

Hors ligne

#5 14-02-2011 12:58:17

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

Je connais le nombre de conditions possibles mais elles ne sont pas forcément toutes présentes en même temps

Hors ligne

#6 14-02-2011 14:17:02

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Filtrage avec une clause WHERE

moijhd a écrit :

On réduit l'écriture mais (même si je ne sais pas vraiment si c'est embetant) on garde la même structure.

Je pourrais reformuler : est-ce que je peux n'avoir qu'une seule requête avec des "conditions vides" par exemple ?

Une condition ne saurait être vide, elle peut éventuellement être toujours vraie (1=1 voire 1 tout court).
Mais je ne vois pas trop l'intérêt, le temps gagné à ne pas passer par les conditionnelles est vraiment négligeable.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 14-02-2011 14:34:26

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

Ok ! Je viens de tester et cela me convient !

Je vous remercie.

Hors ligne

#8 19-02-2011 14:17:11

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

Je viens de penser à autre chose

[code sql]
SELECT
*
FROM
ma_table
WHERE
champ_1 = '%'
AND
champ_2 = 'valeur'
[/code]

Inconvénients de l'utilisation de '%' qui rend la condition sur le champ_1 vide ?

Dernière modification par moijhd (19-02-2011 17:19:30)

Hors ligne

#9 19-02-2011 14:41:10

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Filtrage avec une clause WHERE

Saluton,
Le caractère joker % SQL ne fonctionne pas avec le comparateur d'égalité mais avec l'opérateur LIKE.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 19-02-2011 17:19:57

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

Oui ^^ Donc même question en supposant LIKE

[code sql]
SELECT
*
FROM
ma_table
WHERE
champ_1 LIKE '%'
AND
champ_2 LIKE 'valeur'
[/code]

Hors ligne

#11 19-02-2011 18:10:15

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Filtrage avec une clause WHERE

Entre WHERE 1 et WHERE colonne_1 LIKE '%', sur un gros volume de lignes à tester, les performances risquent de chuter grave.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 19-02-2011 18:58:39

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Filtrage avec une clause WHERE

Si tout ce micmac est juste pour éviter d'écrire quelques lignes de PHP je crains que cela ne vaille pas le coup. ^^'

Hors ligne

#13 20-02-2011 00:49:28

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Filtrage avec une clause WHERE

big_smile

Hors ligne

Pied de page des forums