Salut tout le monde, mon prob est le suivant:
-----------------------------------------------------
$nb=count($tab); ici je compte les mots clé entrer da,sle champ de recherche //
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like \"%$tab[0]%\" ORDER BY '$tri' ";
for($i=1 ; $i<$nb; $i++)
{
$sql.=" $operateur crip like \"%$tab[$i]%\" ";
}
--------------------------------------------------------------------
ceci est une requéte d'un moteur de recherche qui me fait des misères.........
( le formulaire de recherche comporte deux operateur au choix OR ou AND - boutons d'option - )
et jai ajouter un petit system de trie de données sous forme d'un lien qui envoi une variable
'$trie' (name) que récupere ma requéte SQL ORDER BY '$tri'
ici si $tab est ==1 donc un seul mot exemple - géant - et sa mrche à merveille
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri'
mais si $tab > 1 donc plus d'un seul mots l'operateur entre en action $sql.=" $operateur crip like \"%$tab[$i]%\" ";
/voir le script en haut/
et là commence les problèmes, car si par exemple on entre le recherche - géant vert - avec l'operateur OR voici l'echo de ma requéte:
select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri' OR crip like "%vert%"
comme vous le voyer
ORDER BY n'a pas changé de place est là est tout le probléme, car Le critére -
ORDER BY - ce met entre les des mots de la recherche ce qui rend le trie impossible - ORDER BY - DOIT fermé la marche donc étre en dérnier de la requéte pour que sa marche, alors imaginez si j'entre plus de 2 mots clé dans le formulaire de recherches par exemple - géant vert rouge - avec l'operateur OR, l'echo de ma requéte afficheras:
select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" ORDER BY '$tri' OR crip like "%vert%" OR crip like "%rouge%"
sa marcheras sûrement pas......
Conclusion avec un mot clé sa marche avec plus d'un mot ORDER BY ce met entre le premier mot rechercher et les autres mot recherche et si j'ai bien compris est pour que sa marche, dans la requéte sql que voici:
$nb=count($tab); ici je compte les mots clé entrer da,sle champ de recherche //
$sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\" ORDER BY '$tri' ";
for($i=1 ; $i<$nb; $i++)
{
$sql.=" $operateur crip like \"%$tab[$i]%\" ";
}
Premier cas:
ORDER BY '$tri' doit étre une variable qui si($nb == 1) donc un seul mot on laffiche ici:
$sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\" (ORDER BY '$tri') ";
for($i=1 ; $i<$nb; $i++)
{
$sql.=" $operateur crip like \"%$tab[$i]%\" ";
}
---------------------------
deuxiéme cas:
et sinon si($nb > 1) donc plus d'un mot on l'affiche ici:
$sql="select * from xxxxx where 1 AND cat= '$zzzzz' AND crip like \"%$tab[0]%\" ";
for($i=1 ; $i<$nb; $i++)
{
$sql.=" $operateur crip like \"%$tab[$i]%\" (ORDER BY '$tri') ";
}
alors SVP comment faire ceci, et même si c'est possible, pour le deuxiéme cas sa pourait marché seulement si ($nb == 2)
si on chercher 2 mots exemple - géant vert - l'echo de ma requéte :
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" OR crip like "%vert%" ORDER BY '$tri'
si on chercher 3 mots ou plus exemple - géant vert rouge- l'echo de ma requéte;
$sql="select * from xxxxx where 1 AND cat= zzzzz AND crip like "%géant%" OR crip like "%vert%" ORDER BY '$tri'OR crip like "%rouge%"
ALors SV Comme vous lez voyez j'ai besoin d'aide qlors toute proposition sera la trés-bien venue MERCI