Page 1 sur 1

Requete SQL

Posté : 08 août 2006, 20:45
par webdestination
J'ai un formulaire de recherche qui contient une zone de texte et un bouton.
J'ai aussi une base de données mysql
Je veux créer une requête sql type google avec un nombre non limité de mot clés et d'opérateurs : exemple :
france et paris ou espagne et sport...


j'utilise le php comme language.

J'ai trouvé ce code mais çame créé deux problème :
$search = $_POST['search'];

$explode = explode(" ", $search);
$search = "motcle LIKE '%" . implode("%' OR motcle LIKE '%", $explode) . "%'";

$sql = "SELECT * FROM Imb_motcles WHERE ($search) ORDER BY motcle ASC";
1- il prend seulement OR comme opérateur, alors qu'il faut mettre l'opérateur récupéré de la zone de texte ( soit or , soit and ...)
2- Si j'ai un mot clé composé ( exemple : tour effel), il me separe tour et effel et me met : tour OR effel


Un ami m'a proposé ce code, mais ça génére une parse erreur :

$search  = $_POST['search'];

$separateur = array(" ", "+");
$separateursql  = array(" "%'" and motcle like '%" ", " "%'" or motcle like '%" ");

$search = str_replace($separateur, $separateursql, $search);

$sql = "SELECT * FROM Imb_motcles WHERE ( motcle like '%" $search "%'" ) ORDER BY motcle ASC";

Merci pour votre aide.

Posté : 08 août 2006, 20:49
par Cyrano
Essaye donc comme ceci:
$search  = $_POST['search'];

$separateur = array(" ", "+");
$separateursql  = array(" "%'" and motcle like '%" ", " "%'" or motcle like '%" ");

$search = str_replace($separateur, $separateursql, $search);

$sql = "SELECT * FROM Imb_motcles WHERE ( motcle like '%". $search ."%' ) ORDER BY motcle ASC"; 

Requete sql suite

Posté : 08 août 2006, 21:01
par webdestination
Merci pour votre réponse.

La requête générée par ce code est du type :

Code : Tout sélectionner

SELECT * FROM Imb_motcles WHERE ( motcle like '%parisandtoureffelandsport%' )
Alors que moi j'ai besoin d'une requête du type :

Code : Tout sélectionner

<mocle LIKE "paris" OR motcle LIKE "toureffel" AND motcle LIKE "sport">
merci pour votre aide, c vriament urgent.

Posté : 08 août 2006, 21:13
par Hubert Roksor
À mon avis, oublie LIKE et regarde de ce côté: http://dev.mysql.com/doc/refman/5.0/en/ ... earch.html

Re: Requete sql suite

Posté : 08 août 2006, 21:19
par Cyrano
c vriament urgent.
Ça mon bon, on s'en cogne, ce n'est urgent que pour toi et on est pas une société de service, ce forum est animé par des bénévoles exclusivement, donc soit tu as de la chance et quelqu'un passe avec les capacités et l'envie de t'aider ou tu fais appel à un prestataire de service spécialisé.

Ceci dit :
-1- Récupérer la chaine et la structurer dans un tableau;
-2- Modifier chaque élément du tableau pour construire chaque clause WHERE et y ajouter éventuellement les joker "%";
-3- Recréer la chaîne avec les séparateurs;

Le problème, c'est le format dans lequel la chaîne est reçue : peux-tu nous mettre un copié/collé de la chaine telle qu'elle est reçus avant tout traitement ?

Posté : 08 août 2006, 23:50
par Invité
Merci pour ta réponse.

Voilà la chaine demandées :

SELECT * FROM Imb_motcles WHERE ( motcle like '%parisandtoureffelorsport%' )

le but c obtenir :

SELECT * FROM Imb_motcles WHERE motcle LIKE "paris" AND motcle LIKE "tour effel" OR motcle LIKE "sport"


Merci pour votre aide.

Posté : 09 août 2006, 07:37
par Cyrano
Non, ça, c'est la requête générée : si tu fais quelque chose comme :
echo($_POST['search']);
ça affiche quoi ?