Page 1 sur 1

Algorithme de moteur

Posté : 14 juil. 2005, 21:30
par pepi
Bonsoir,

Je me pose une question apropos d un algo pr rechercher a partir d un questionnaire multichanp a selectionner. La recherche doit etre possible avec seulement 1 ou plsieurs criteres ou tous les criteres. Pour le 1e et 3e cas c rapide, mais je me demande comment faire pour les cas "champ 1 et 3 rempli" ou "champ 1 et 3 et 5" rempli; faut il ecrire toutes les requetes ou y a t il des algorithmes qui permettent de tout boucler en quelques lignes de requetes?

merci

Posté : 14 juil. 2005, 21:51
par Axel
non mais il faut écrire ta commande SQL avec des conditions du type:
$query = "SELECT * FROM matable "
$query .= "WHERE ";

if (monchamp1 != ''){ $query .= "matable.monchamp1 = monchamp1  AND ";}
if (monchamp2 != ''){ $query .= "matable.monchamp2 = monchamp2  AND ";}
if (monchamp3 != ''){ $query .= "matable.monchamp3 = monchamp3  AND ";}
if (monchamp4 != ''){ $query .= "matable.monchamp4 = monchamp4 ";}
en fait tu mets toutes les possiblités mais les conditions permettent ou non leur intégration dans la commande SQL.

Attention avant d'envoyer la commande il faut vérifier qu'il n'y a pas un AND qui traine sans condition derriere, ex:
SELECT * FROM matable WHERE matable.monchamp2 = monchamp2 AND matable.monchamp3 = monchamp3 AND
si il n'y a pas de condition4

Voilà

Posté : 14 juil. 2005, 21:54
par pjl
Sujet traité il y a moins d'une semaine je crois.

Image

Posté : 14 juil. 2005, 21:55
par Cyrano
Non, tu peux simplifier en créant ta requête dynamiquement. Schéma sommaire:
<?php
$sql = "SELECT champ_1, champ_2, ... , champ_n".
"FROM table_x ";
/* En fonction des conditions (champs cochés ou non par exemple, on ajoute les clauses */
$clauses = array();
if(condition_1 == true)
{
    array_push($clauses,"champ_x = valeur_x ");
}
if(condition_2 == true)
{
    array_push($clauses,"champ_y = valeur_y ");
}
/* ... etc ... */
$nb_clauses = count($clauses);
if($nb_clauses > 0)
{
    $sql .= "WHERE ";
    for($i = 0; $i < $nb_clauses; $i++)
    {
        $sql .= ($i == ($nb_clauses - 1)) ? $clauses[$i]."AND " : $clauses[$i];
    }
}
/* Ajout éventuel de clauses supplémentaires comme ORDER BY par exemple */
?>

[resolu] Merci!

Posté : 16 juil. 2005, 20:57
par pepi
merci infiniment pour votre aide (je suis en stage et je dois faire du php)!!!!
en effet j aurai pas trouve seule...
la route du debutant est longue et semee "d'error", surtout qu on ne connait pas vraiment la programmation.

Posté : 16 juil. 2005, 21:36
par ouckileou
sinon il y a quelques solutions bien pratiques énoncées ici :
http://www.phpfrance.com/forums/voir_sujet-3902.php