Requete SQL

Petit nouveau ! | 2 Messages

08 août 2006, 20:45

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.

Mammouth du PHP | 19672 Messages

08 août 2006, 20:49

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"; 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 2 Messages

08 août 2006, 21:01

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.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

08 août 2006, 21:13

À mon avis, oublie LIKE et regarde de ce côté: http://dev.mysql.com/doc/refman/5.0/en/ ... earch.html

Mammouth du PHP | 19672 Messages

08 août 2006, 21:19

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

08 août 2006, 23:50

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.

Mammouth du PHP | 19672 Messages

09 août 2006, 07:37

Non, ça, c'est la requête générée : si tu fais quelque chose comme :
echo($_POST['search']);
ça affiche quoi ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: