Page 1 sur 1

Comment faire des multi recherches dans un LIKE SQL ?

Posté : 25 juin 2013, 19:47
par wwwbillgates
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

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

Posté : 25 juin 2013, 20:05
par dix2
salut,

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

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

Posté : 25 juin 2013, 20:16
par sirakawa
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 ?

Posté : 25 juin 2013, 21:36
par dix2
comment tu combines un IN et un LIKE en même temps ?

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

Posté : 26 juin 2013, 08:52
par Mazarini
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 ?

Posté : 26 juin 2013, 16:34
par wwwbillgates
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 ?

Posté : 26 juin 2013, 17:04
par Mazarini
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 ?

Posté : 26 juin 2013, 17:07
par sirakawa
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