Mysql : plusieurs requetes en une [résolu]

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

2fou
WRInaute discret
WRInaute discret
 
Messages: 223
Inscription: 7 Juil 2003

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 discret
WRInaute discret
 
Messages: 223
Inscription: 7 Juil 2003

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 discret
WRInaute discret
 
Messages: 134
Inscription: 1 Mai 2004

Message le Lun Mai 30, 2005 12:32

remplace les AND par des OR ;)

enfin si j'ai bien compris le pb ;)


Lambo
WRInaute discret
WRInaute discret
 
Messages: 100
Inscription: 19 Mar 2005

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 discret
WRInaute discret
 
Messages: 223
Inscription: 7 Juil 2003

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 discret
WRInaute discret
 
Messages: 134
Inscription: 1 Mai 2004

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 discret
WRInaute discret
 
Messages: 100
Inscription: 19 Mar 2005

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 discret
WRInaute discret
 
Messages: 223
Inscription: 7 Juil 2003

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

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 les experts Google Analytics de Ranking Metrics.

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