Comment faire des multi recherches dans un LIKE SQL ?

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 : Comment faire des multi recherches dans un LIKE SQL ?

Re: Comment faire des multi recherches dans un LIKE SQL ?

par sirakawa » 26 juin 2013, 17:07

en écrivant ainsi tu t'interdis tout test:
$totalcommande_en_cours_sql = $bdd->query("
                                                        SELECT id
                                                        FROM cadeauxplaisir_commandes
                                                        WHERE tracking_url LIKE '%" . $array_tracking[0] . "%'
                                                        OR tracking_url LIKE '%" . $array_tracking[1] . "%'
                                                        AND paiement != 0
                                                        UNION ALL
                                                        SELECT id
                                                        FROM bouille_commandes
                                                        WHERE tracking_url LIKE '%" . $array_tracking[0] . "%'
                                                        OR tracking_url LIKE '%" . $array_tracking[1] . "%'
                                                        AND paiement != 0
                                                        ");
écris plutôt:
$bidule_1 =  "%".$array_tracking[0]."%";
$requete = "SELECT id FROM cadeauxplaisir_commandes
                                                        WHERE tracking_url LIKE '$bidule_1'
                                                        OR tracking_url LIKE '%" . $array_tracking[1] . "%'
                                                        AND paiement != 0
                                                        UNION ALL
                                                        SELECT id
                                                        FROM bouille_commandes
                                                        WHERE tracking_url LIKE '%" . $array_tracking[0] . "%'
                                                        OR tracking_url LIKE '%" . $array_tracking[1] . "%'
                                                        AND paiement != 0
                                                        ";
etc et
print"$requete"; //pour voir à quoi elle ressemble
et quand tu exécutes la requete, fais afficher le message d'erreur

Re: Comment faire des multi recherches dans un LIKE SQL ?

par Mazarini » 26 juin 2013, 17:04

Vérifier le contenu de $array_tracking (var_dump($array_tracking))

Vérifier que la requête sql ne retourne pas d'erreur
(je connais pas la gestion des erreurs via PDO, paramétrer lors de la connexion le déclenchement d'une exception)

Afficher le contenu de la requête pour la tester avec un client mysql ou phpmyadmin.

Il faudrait mettre les OR entre parenthèse par rapport au AND : "OR" comme "+" et "AND" comme "x"

Je te laisse réfléchir à ca pour faire la clause where :
foreach ($array_tracking as $test) {
   $cond[] = "tracking_url LIKE '%" . $test . "%'";     // créer un tableau avec les conditions like quelque soit le nombre
}
if (count($array_tracking)==0) {
   $condition = "WHERE paiement != 0";   // pas de like
} else {
   $condition = " WHERE paiement != 0 AND (".implode(' OR ',$cond).') ";   // joindre les clauses par des or et mettre l'autre condition 
}   
(en espérant ne pas avoir fait d'erreur de quote ou d'espace).

Re: Comment faire des multi recherches dans un LIKE SQL ?

par wwwbillgates » 26 juin 2013, 16:34

Hum merci mais malheureusement ca ne fonctionne pas et ne ne trouve pas mon erreur. Voici ma requête en entière :

$array_tracking = explode('[sep]', $revendeurs['recherche_tracking']);

$totalcommande_en_cours_sql = $bdd->query("
							SELECT id
							FROM cadeauxplaisir_commandes
							WHERE tracking_url LIKE '%" . $array_tracking[0] . "%'
							OR tracking_url LIKE '%" . $array_tracking[1] . "%'
							AND paiement != 0
							UNION ALL
							SELECT id
							FROM bouille_commandes
							WHERE tracking_url LIKE '%" . $array_tracking[0] . "%'
							OR tracking_url LIKE '%" . $array_tracking[1] . "%'
							AND paiement != 0
							");
$totalcommande_en_cours_sql->setFetchMode(PDO::FETCH_ASSOC);
$totalcommande_en_cours_sql->execute();
$nb_de_commandes_en_cours = $totalcommande_en_cours_sql->rowCount();

Re: Comment faire des multi recherches dans un LIKE SQL ?

par Mazarini » 26 juin 2013, 08:52

Ca dépend si on cherche des "like" (ta solution avec les "OR" est la bonne) ou si la liste de nom correspond à des noms exacts (la solution de sirakawa est la bonne).

Re: Comment faire des multi recherches dans un LIKE SQL ?

par dix2 » 25 juin 2013, 21:36

comment tu combines un IN et un LIKE en même temps ?

Re: Comment faire des multi recherches dans un LIKE SQL ?

par sirakawa » 25 juin 2013, 20:16

Sans pub pour moi,
in fait très bien ce boulot:
http://www.tutorialspoint.com/mysql/mysql-in-clause.htm

Re: Comment faire des multi recherches dans un LIKE SQL ?

par dix2 » 25 juin 2013, 20:05

salut,

tu peux utiliser le OR :
SELECT nom
FROM sql_nom
WHERE nom LIKE '%" . $nom1 . "%'
OR nom LIKE '%" . $nom2 . "%'
@+
dix2

Comment faire des multi recherches dans un LIKE SQL ?

par wwwbillgates » 25 juin 2013, 19:47

Bonjour, je souhaiterais savoir s'il est possible de faire des multi recherches dans un LIKE. Par exemple si ma variable $nom vaut :

Code : Tout sélectionner

$nom = 'Maurice[sep]josé[sep]Raymond';
Comment faire pour que mon LIKE recherche dans mon sql soit Maurice, soit José ou soit Raymond en sachant que ma variable peut comporter 3 noms aussi bien quelle peut en comporter 10 ?
$nom_sql = $bdd->query("
					SELECT nom
					FROM sql_nom
					WHERE nom LIKE '%" . $nom . "%'
					");
$nom_sql->setFetchMode(PDO::FETCH_ASSOC);
Merci et bonne soirée