Mysql : plusieurs requetes en une [résolu]

2fou

WRInaute discret
bonjour,

sur un script de recherche multicritères je veux associer plusieurs requetes déja utilisé.

Code:
$sqlsens = "select * from courrier where sens = '$sens'"; $sqldate = "select * from courrier where datecourrier > '$annee-$mois-$jour' and datecourrier < '$annee2-$mois2-$jour2'"; 

$sqlexpe = "select * from courrier where expediteur = '$exped'"; 

$sqldest = "select * from courrier where destinataire = '$dest'"; 

$sqlmot = "select * from courrier where objet like '%$mot%' OR destinataire like '%$mot%' OR expediteur like '%$mot%'OR type like '%$mot%'";

Séparemmant, chacune de ces requetes fonctionnent.

J'ai donc essayé ceci :

Code:
$sql1 = "select * from courrier where sens = '$sens' and datecourrier > '$annee-$mois-$jour' and datecourrier < '$annee2-$mois2-$jour2' and expediteur = '$exped' and destinataire = '$dest' and (objet like '%$mot%' OR destinataire like '%$mot%' OR expediteur like '%$mot%'OR type like '%$mot%')";

mais cela ne fonctionne pas.
la requet ne retourne aucun résultat quel que soit mes critères de recherche .

en fait, je pense que la requete est trop longue (trop de and et or).
alors je me demandais (et je vous demande) s'il existe une formulation du type

$req1 = "select..."
$req2 = "select..."
$req3 = "select..."

$req4 = $req1 + $req2 + $req3

Pouvez vous s'il vous plait m'aider à faire fonctionner cette requete
Merci de votre aide.
 

2fou

WRInaute discret
je viens de m'appercevoir que si je vire " expediteur = '$exped' ou destinataire = '$dest' ,
la recherche mutlicritère fonctionne pour tous les critères (sauf le critère viré).

help me please !!!
 

Lambo

WRInaute discret
Non, en fait, comme tu force tous les paramètres dans ta requête, il faut que dans ta recherche tu précises une valeur pour chaque paramètre, sinon tu peux te retrouver avec des expediteur = '' ce qui correspond à un expediteur vide.
Je suppose que ce que tu veux c'est que si tu ne mets pas d'expéditeur, il ne tient pas compte de cette clause.

Et dans ce cas, il faut que tu construises ta clause where en fonction des paramètres qui ont été saisis pour la recherche.
Tout cela avec des petits "if".
 

2fou

WRInaute discret
salut.

je ne pense pas que le OR soit la bonne solution.

je veux que ce script de recherche multicritère me permettent de retrouver dans la bdd, par exemple les courriers classé dans la catégorie "envoyés" ($sens=départ) ET enregistrés après le 01/05/205 ET Avant le 30/05/05 ET dont l'expéditeur est Mr Untel ($exped="Untel") ET le destinataire est Mme choze ($dest="choze") ET contenant le terme "Choucroute"... ($mot = choucroute et objet like '%$mot%' OR destinataire like '%$mot%' OR expediteur like '%$mot%'OR type like '%$mot%

comme dit précédemment, le script fonctionne si je vire un des critère (expéditeur, destinataire,...)
 

willyz85

WRInaute discret
comme ca

$sql1 = "select * from courrier where ";

if(!empty($sens))
{
$sql1 .= "sens = '$sens' AND";
}

AND ou OR, selon ce que tu veux ;)
 

Lambo

WRInaute discret
Hé, c'est ce que je viens de dire lol
Mais c'est vrai qu'avec un bout de code c'est mieux !

Mais faut juste pas mettre le where dans le $sql1 tout de suite parce que si tu ne passes dans aucun if, ta requête ne sera pas valable ;)
 

2fou

WRInaute discret
ok merci bcp,
ça à l'air de fonctionner...
pour mes listes expéditeurs et destinataire , dans le select avant les <option> dynamique correspondantes au contenu de la table, j'ai ajouté un <option value="tous">Tous</option>

et ma requete devient :
$sql = "select * from courrier where sens = '$sens'";

$sql .= " and datecourrier > '$annee-$mois-$jour' and datecourrier < '$annee2-$mois2-$jour2'";

if ($expedi != 'tous')
{
$sql .= " and expediteur = '$expedi' ";
}

if ($dest != 'tous')
{
$sql .= " and destinataire = '$dest' ";
}

if ($mot != '')
{
$sql .= " and (objet like '%$mot%' OR destinataire like '%$mot%' OR expediteur like '%$mot%'OR type like '%$mot%')";
}
 

Discussions similaires

Haut