Associer deux conditions dans une requête mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Associer deux conditions dans une requête mysql

par pingoo » 02 juil. 2005, 16:39

Merci beaucoup pour votre aide cela fonctionne.
Bonne soirée :lol:

par ouckileou » 02 juil. 2005, 14:25

tu peux déjà essayer de remplacer tous les "if" concernant le choix de la date par un "switch", ce n'est pas très compliqué et ça allégera ton code

par pingoo » 02 juil. 2005, 14:20

Merci pour votre aide mais je ne suis pas sur de comprendre comment adapter mon code . :oops:

par ouckileou » 02 juil. 2005, 14:08

cela fait beaucoup de tests, tu pourrais effectivement simplifier, voici quelques pistes :

- remplaces tous tes "if" concernant les choix de dates par un "switch"
=> http://fr2.php.net/manual/de/control-st ... switch.php
- tu peux virer un de ces 2 tests :
if ($mots_cle != "" && $parution =="toutes") {
    $select .= "where secteur_activite LIKE '%". $mots_cle ."%' ";
    }
if ($mots_cle != "" && $parution !="toutes") {
    $select .= "AND secteur_activite LIKE '". $mots_cle ."%' ";
    }
regarde ce petit truc : http://www.phpfrance.com/forums/voir_sujet-3902.php

enfin, je mettrais un bémol au message précédent de Kmeleon, à partir du moment où tu peux faire une sélection en SQL, fais la en SQL et pas en PHP

si tu testes le mot-clé en SQL et la date en PHP, tu peux avoir ça
5000 articles dans la base, 4000 qui contiennent le mot-clé, 10 postés aujourd'hui
résultat tu va parcourir 4000 lignes de résultats, pour faire 4000 tests de date et n'en garder que 10... tu va sérieusement ralentir ton script, alors que MySQL t'aurais fait ça en 2 temps 3 mouvements

;)

par pingoo » 02 juil. 2005, 13:59

Voici mon code (c'est du bricolage je ne suis qu'un débutant) :oops:
$select  = "SELECT * FROM fk_offre_emploi "; 
if ($parution != "toutes") {
if ($parution=="aujourdhui") {
 	$select .= "where date > '". $date1 ."' ";
	}
if ($parution=="1semaine") {
 	$select .= "where date > '". $date2 ."' ";
	}
if ($parution=="2semaines") {
 	$select .= "where date > '". $date3 ."' ";
	}
if ($parution=="3semaines") {
 	$select .= "where date > '". $date4 ."' ";
	}
if ($parution=="1mois") {
 	$select .= "where date > '". $date5 ."' ";
	}
	}
if ($mots_cle != "" && $parution =="toutes") {
 	$select .= "where secteur_activite LIKE '%". $mots_cle ."%' ";
	}
if ($mots_cle != "" && $parution !="toutes") {
 	$select .= "AND secteur_activite LIKE '". $mots_cle ."%' ";
	}
La condition du mot clé est réspecté par contre la date elle non?
pouvez-vous m'aider SVP
MERCI

par kmeleon » 02 juil. 2005, 13:59

$query = "SELECT * FROM table WHERE champs LIKE '%". $mots_cle ."%'";
$result = mysql_query($query);
$variable = mysql_fetch_array($result);

// Là on va utiliser une condition pour vérifier la date
if ($variable["date"] > $date1){
  // La suite de ton code
}
Donc cet exemple remplace le

Code : Tout sélectionner

AND date > '".$date1."'
On peut faire pareil pour le

Code : Tout sélectionner

LIKE '%".$mot_cle."%'
, mais il faut utiliser une expression régulière qui vérifie si $mot_clé est contenu dans "champs":
$query = "SELECT * FROM table WHERE date > '".$date1."' ";
$result = mysql_query($query);
$variable = mysql_fetch_array($result);

// Expression régulière (preg_match)
if (preg_match("!".$mot_cle."!", $variable["champs"]){
  // La suite de ton code
}
Donc là on a vérifié que le $variable["champs"] contenait bien le mot clé $mot_cle.
Pour les deux exemples tu peut rajouter "} else {" pour dire que la recherche ne trouve rien...

Voilà ! Bonne journée (je part et je reviens que dans une semaine donc je peux plus répondre) !

par ouckileou » 02 juil. 2005, 13:58

pour avoir les textes d'aujourd'hui ce ne serait pas plus simple de faire ça :
$date1= date("Y-m-d");
SELECT * From table where date = '". $date1 ."'
faire :
"tous les textes dont la date est celle d'aujourd'hui"
plutôt que :
"tous les textes dont la date est supérieure à celle d'hier"

;)

pour ton problème de conditions simultanées tu es sûr que tu as des textes qui correspondent bien ? car Kmeleon t'a donné la bonne solution

par pingoo » 02 juil. 2005, 13:41

Merci pour ton aide.
Cela fonctionne mais la condition d'afficher les textes d'aujourd'hui n'est pas respecté.
Si je supprime la recherche par mots clés la condition fonctionne.
Je suis perdu :cry:

par kmeleon » 02 juil. 2005, 13:34

Tu rajoute un "AND" puis ta 2e condition:

Code : Tout sélectionner

SELECT * FROM table WHERE champs LIKE '%". $mots_cle ."%' AND date > '". $date1 ."'
Bonne journée

Associer deux conditions dans une requête mysql

par pingoo » 02 juil. 2005, 13:30

Bonjour,
J'aimerais associer deux conditions.
Voila mon problème :
D'un côté
Je fais une recherche simple dans une base de données avec LIKE :
SELECT * From table where champs LIKE '%". $mots_cle ."%'
 
Et de l'autre
Je fais un affichage par date :
$date1= date("Y-m-d", strtotime("  -1 day"));
SELECT * From table where date > '". $date1 ."'
J'aimerais associer les deux afin que seul les textes recherché et entrés dans la base le jour même soit affichés.
Merci beaucoup pour votre aide :P