Mysql : plusieurs requetes en une [résolu]

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

2fou
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

Mysql : plusieurs requetes en une [résolu]

Message le Lun Mai 30, 2005 10:49

bonjour,

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

Code: Tout sélectionner
$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: Tout sélectionner
$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.
Dernière édition par 2fou le Lun Mai 30, 2005 13:37, édité 1 fois.

2fou
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

Message le Lun Mai 30, 2005 12:27

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 !!!
Dernière édition par 2fou le Lun Mai 30, 2005 12:35, édité 1 fois.


willyz85
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 134
Inscription: Sam Mai 01, 2004 12:07

Message le Lun Mai 30, 2005 12:32

remplace les AND par des OR ;)

enfin si j'ai bien compris le pb ;)


Lambo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 100
Inscription: Sam Mar 19, 2005 17:58

Message le Lun Mai 30, 2005 12:38

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 occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

Message le Lun Mai 30, 2005 12:43

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 occasionnel
WRInaute occasionnel
 
Messages: 134
Inscription: Sam Mai 01, 2004 12:07

Message le Lun Mai 30, 2005 12:45

comme ca

$sql1 = "select * from courrier where ";

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

AND ou OR, selon ce que tu veux ;)


Lambo
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 100
Inscription: Sam Mar 19, 2005 17:58

Message le Lun Mai 30, 2005 12:47

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 occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

Message le Lun Mai 30, 2005 12:55

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%')";
}


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités