
Envoyé par
leya_jarhan
Je comprends ton point de vue avec la sélection "Colonne, opérateur, valeur"
Mais cela devra quand même avoir des opérateur de groupement après ... Pour lier les lignes les unes avec les autres.
???
SELECT * FROM table WHERE a=1 AND (b=2 OR b=3)
donnera exactement le même résultat que
SELECT * FROM table WHERE (a=1 AND b=2) OR ( a=1 AND b=3)

Envoyé par
leya_jarhan
Sachant que je n'ai pas besoin des >, <, MIN, MAX.... Mes spécifications sont claires... J'ai juste besoin de == et !=. Donc ET et OU et SAUF sont suffisant.
Qui peut le plus peut le moins. Pas la peine de tous les implémenter tout de suite, mais si un jour on te les demandes, tu ne seras pas obligé de tout casser...

Envoyé par
leya_jarhan
L'interface réalisée est conforme aux spécificités... Elle est simple d'utilisation et corresponds au besoin du client.
Personnellement, je ne trouve pas ça trivial d'écrire :
Civilite Mme ET
Pays France SAUF
Je préfère :
Civilite = Mme
Pays != France

Envoyé par
leya_jarhan
Le problème reste de lister des "règles" pour lire une ligne de donnée afin de l'interprêter en propel ou en SQL.
Exemple:
Civilite = Mme AND (Pays = France OR Pays = BELGIQUE)
SI op = ET
* alors ???
SI op = OU
* alors ???
SI op[n-1] = OU
* alors ???
etc...
Si tu restes avec tes OU,ET et SAUF, effectivement ça risque d’être compliqué...
Alors qu'avec la méthode que je t'ai proposé c'est assez simple de formater le "WHERE" d'une requête SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| $where="";
foreach($group) {
if($firstGroup) {
$firstGroup=false;
}
else {
$where+=" OR ";
}
$where+="(";
foreach($criteredugroup) {
$where+=$criteredugroup->type;
$where+=" ";
if($criteredugroup->criterias=="") {
if($criteredugroup->operateur=="=") {
$where+= "IS NULL";
}
else if($criteredugroup->operateur=="!=") {
$where+= "IS NOT NULL";
}
else {
//TODO
}
}
else {
$where+=$criteredugroup->operateur;
$where+=" ";
$where+=$criteredugroup->criterias;
}
}
$where+=")";
} |
Partager