Recherche SQL sur plusieurs champs à la fois

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 : Recherche SQL sur plusieurs champs à la fois

Re: Recherche SQL sur plusieurs champs à la fois

par STaN47 » 05 oct. 2012, 17:08

Effectivement je suis conscient que ce n'est pas très conventionnel et surtout long...
Je vais malgré tout tester, je reviens vers vous en cas de problème
Merci beaucoup de votre aide
STaN47

Re: Recherche SQL sur plusieurs champs à la fois

par Mazarini » 05 oct. 2012, 16:07

Eventuellement tu peux essayer un outils comme htdig (dispo sur Linux). C'est un moteur de recherche google en moins puissant.

Pour ton problème, je butte sur des problèmes d’algorithme si tu veux faire une unique zone de saisie.
Comment obtenir "RF*GA35158M", "TERUMO" et "designation : RADIOFOCUS GUIDEWIRE 150cm 0,035INCH"
Ma méthode ne permettrait de rechercher que des mots avec présence de chacun ; c'est à dire "RF*GA35158M", "TERUMO", "RADIOFOCUS", "GUILDWIRE", "150cm" et "0,035INCH".

A tout hasard :
<?PHP
$mots = explode(' ',$_GET['mots'];
$criteres = array();
foreach ($mots as $mot) {
$criteres[] = "(reference like '%$mot%' or designation like '%$mot%' or laboratoire like '%$mot%')"; 
}
$cond = implode(' AND ',$criteres);
$select = 'SELECT ..... WHERE ID = .... AND' . $cond; 
?>
(quelques contrôles à ajouter)

Mais ca risque d'être long comme requete.

Re: Recherche SQL sur plusieurs champs à la fois

par Invité » 05 oct. 2012, 15:07

Tout d'abord merci de vos réponses

C'est bien le souci, car il faut que l'utilisateur comprenne de quel produit il s'agit, d'où la présence de 2 champs "reference" et "designation". Il s'agit d'une base de données de dispositifs médicaux et un champ "référence" uniquement ne donne pas de renseignements à l'utilisateur.
J'ai mis en place une table dans laquelle plusieurs champs sont renseignés:
reference (text) / designation (text) / laboratoire (text) / stock (int) / stock minimum (int)...

Le principe est de réaliser à la maniere de google une recherche croisée. C'est à dire si mon utilisateur ne connait pas la référence il tape la désignation. ou l'inverse il connait la référence mais pas la designation. Ou les 2 à la fois.
C'est pour ca que je cherche à effectuer une recherche "multi champs", mais je l'aimerai sur 1 seul input.


Par exemple : Dans ma base de données j'ai pour une ligne :
reference : RF*GA35158M
laboratoire : TERUMO
designation : RADIOFOCUS GUIDEWIRE 150cm 0,035INCH

Je veux que lorsque l'utilisateur tape soit RF*GA35158M ou RADIOFOCUS GUIDEWIRE 150cm 0,035INCH il trouve la fiche du produit. (Ca j'ai réussi). Là ou ca se corse c''est lorsque l'utilisateur tape les 2 : RF*GA35158M RADIOFOCUS GUIDEWIRE 150CM 0;035INCH. Là je n'obtiens aucun résultat (bien sur je peux mettre des LIKE %...%) mais c'est pas optimal.

Qu'en pensez vous ?
(Ce qu'il est difficile d'expliquer simplement ce qu'on a en tête !)

Re: Recherche SQL sur plusieurs champs à la fois

par sirakawa » 05 oct. 2012, 13:17

Mazarini suggère une solution intéressante mais j'aimerais que tu expliques comment est conçue ta base de données:
j'effectue une recherche avec 1 input dans une base de données MySQL sur plusieurs champs : reference / designation / laboratoire.
Il y a nécessairement une table laboratoires:
id_labo entier aut_increment clef primaire
nom_labo
Référence et désignation, ça ne fait pas double emploi? Comme s'il pouvait y avoir plusieurs désignations pour la même référence...

Re: Recherche SQL sur plusieurs champs à la fois

par Mazarini » 05 oct. 2012, 11:30

De quoi disposes tu concrètement pour faire ta recherche ?

De ce que je comprends, l'utilisateur saisie une chaîne de caractères et tu dois décomposer cette chaîne pour faire ta recherche. A mon avis, tu te compliques la vie. Tu ferais ca plus simplement en proposant 3 zones de saisie à l'utilisateur. Le véritable problème est dans l'interprétation de la saisie, pas dans la mise en forme de la requête.

Une solution peu élégante à mon gout serai de découper la chaine en mot (function explode()) et de faire une recherche de chaque mot dans les trois champs.

where (reference like '%mot1%' or designation like '%mot1%' or laboratoire like '%mot1%')
and (reference like '%mot2%' or designation like '%mot2%' or laboratoire like '%mot2%')
...

Recherche SQL sur plusieurs champs à la fois

par stan47310 » 05 oct. 2012, 11:04

Bonjour tout le monde, voilà mon problème (qui malgré quelques recherches google en reste toujours un...)
j'effectue une recherche avec 1 input dans une base de données MySQL sur plusieurs champs : reference / designation / laboratoire.
J'arrive très bien à rechercher avec cet input les résultats indépendamment l'un de l'autre c'est à dire si je tape une référence même incomplète je la retrouve dans la base.
Seulement j'aimerai que si l'utilisateur tape dans le champ input la référence la designation et le laboratoire cela me retourne un résultat.
Je bloque car je n'arrive pas à comprendre comment retourner des résultats même lorsque la saisie est incomplète sur plusieurs champ MySQL à la fois.

J'espère m'être bien fait comprendre
Merci d'avance de votre réponse!
STaN47