tutoriaux de moteur de recherche multicritères

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 : tutoriaux de moteur de recherche multicritères

par albat » 01 oct. 2006, 14:11

Mea culpa... :oops:

par Cyrano » 01 oct. 2006, 14:04

Et n'oublie de cliquer sur le bouton "Mettre Résolu" en haut à gauche de ta page. ;)
Elle peut pas, elle a posté le sujet original en "invité", je l'ai fait moi-même ;)

par albat » 01 oct. 2006, 13:53

Merci pour tes sympathiques compliments.

Et n'oublie de cliquer sur le bouton "Mettre Résolu" en haut à gauche de ta page. ;)

par bibi85 » 01 oct. 2006, 13:43

Merci à tous pour vos réponses. J'ai finalement réussi à le faire fonctionner avec "empty", mais je vais tester chacune des solutions proposées.

je trouve que ce forum est très sympa et que vous apportez des réponses compréhensibles pour une débutante comme moi.

merci beaucoup pour ce que vous faites ! :P

par albat » 01 oct. 2006, 12:36

le WHERE 1 = 1 va en fait demander à MySQL (ou tout autre SGBD)
de vérifier une condition supplémentaire. On est d'accord.

Et aussi que ça prendra un pouième de seconde. Donc négligeable.

mais...

ce pouième de seconde n'est-il pas tout de même inférieur
au temps de traitement du serveur PHP pour compiler le code de Ryle ?
Or, on sait que, autant que possible, il vaut mieux faire bosser MySQL que PHP, non ?

Mon avis est que WHERE 1=1 est plus vite interprété par MySQL
que la définition et la gestion de l'array[] et du implode() par PHP.

Moralité :
Si quelqu'un veut faire un benchmark sur 100000000 occurrences
pour vérifier qu'on arrive bien à 0,0000000000546 s d'écart... :lol:
Vous avez compris ce qu'est un "méticuleur de mouches", maintenant ? :langue:

par Cyrano » 01 oct. 2006, 12:19

En fait, le WHERE 1 = 1 n'a d'intérêt que si on doit prévoir une construction dynamique de clauses supplémentaires.

Quant à la manière de le faire, je préfère personnellement celle décrite par Ryle que j'utilise moi-même et privilégie.

L'autre méthode est certes valide, mais de mon point de vue personnel est "moins propre".

Et si je voulais jouer les "méticuleurs de mouches" (*) j'ajouterais que le WHERE 1 = 1 va en fait demander à MySQL (ou tout autre SGBD) de vérifier une condition supplémentaire : même si on connaît d'avance la réponse, il n'en demeure pas moins qu'on fait travailler le SGBD sur la vérification de cette clause. Alors ce n'est certainement pas mesurable comme effet (ou alors à l'échelle de la nano-seconde et encore...), mais c'est tout de même une perte de temps qui, multiplié par un nombre important de requêtes sur l'ensemble de l'application, peut aboutir à terme à prendre des secondes entières... :-k

(*) Demandez la traduction à Albat :langue:

par albat » 01 oct. 2006, 12:07

Pour ma part, je suis partagé. :|

Je suis très sensible à l'élégance de la solution proposée par Ryle
(solution que je ne manquerai pas d'adopter à l'avenir...) :merci:
mais je défends tout de même la légitimité de l'astuce précédemment évoquée.
//
$req = "SELECT champs FROM table WHERE 1=1";
if ($val_reference1) $req .= " AND champ1 = ".$val_reference1;
if ($val_reference2) $req .= " AND champ2 = ".$val_reference2;
// ...
L'astuce consistant à indiquer une condition toujours vérifiée dans la clause WHERE
pour ensuite y ajouter les éventuelles clauses AND ou OR
est en effet préconisée par M. Oracle himself ! :!: (Jean-Hubert, de son prénom)

C'est une astuce, oui. Mais pas une bidouille. :evil:

Certes, elle est moins élégante que celle proposée par Ryle (je le répête, mais c'est parce que je t'aime bien) :lol:
mais elle implique moins le développement dans un langage externe (ici, PHP)
et peut se construire entièrement en SQL, indépendamment du langage de dev utilisé...

par Ryle » 01 oct. 2006, 11:54

Je partage l'avis de Cyrano.. c'est uniquement de la bidouille pour ne pas s'embêter à gérer les cas WHERE / AND, mais personnellement je ne trouve pas ça très rigoureux... Surtout qu'il suffit de faire un tableau avec ses différentes conditions et de faire un implode() avec la chaine "AND" pour obtenir, simplement, une requête sql propre :
$cond = array();
if ($critere1!="") 
  $cond[] = "taTable.nomDuCritere1=".$critere1; 
...

$sql = "SELECT ... FROM ... ";
if(count($cond) > 0)
  $sql.= " WHERE " . implode(" AND ", $cond);

par Cyrano » 01 oct. 2006, 10:38

C'est une astuce : il faut traduire par "WHERE 1 = 1" et dans ce cas, ce sera toujours vrai. Mon avis personnel : on utilise pas ce genre d'astuce, ça sort de phpMyAdmin qui utilise ce truc et c'est d'une utilité que je trouve des plus douteuses :-k

par bibi85 » 01 oct. 2006, 10:17

merci pour ta réponse. une question : à quoi crorrespond 1 après WHERE ?

Re: tutoriaux de moteur de recherche multicritères

par hbellahc » 30 sept. 2006, 10:53

bonjour,
j'essaye de faire un petit moteur de recherche (3 critères) qui offre donc 7 combinaisons différentes, mais il ne fonctionne pas ! qqun peut-il me dire où je peux trouver un exemple ?
merci d'avance pour votre aide !
Bonjour
T'as trois critères ,la solution c'est de créer des chaines de caractères et de les concaténer ensuite dans ta requête ,je te donne un exemple :

Pour le premier critère ,appelant le critere1

if ($critere1=="") $chaine="";
else $chaine=" AND taTable.nomDuCritere1=".$critere1;


// Ensuite dans ta requête 
$req= "SELECT * FROM taTable,... WHERE 1 AND $chaine";

//Donc ici Si $critere1 est rempli tu obtiens une requête comme celle la
//SELECT * FROM taTable WHERE 1 AND valeurDuCritere1
//sinon SELECT * FROM taTable Where  1

Voila , Normalement ça marchera ,dans le Cas d'un OR tu utilise "0 OR"

par Cyrano » 30 sept. 2006, 09:43

Tu pourrais peut-être nous exposer le problème plus précisément. "ça ne fonctionne pas", ce n'est pas d'une utilité considérable pour obtenir de l'aide :-k

tutoriaux de moteur de recherche multicritères

par bibi85 » 30 sept. 2006, 09:05

bonjour,
j'essaye de faire un petit moteur de recherche (3 critères) qui offre donc 7 combinaisons différentes, mais il ne fonctionne pas ! qqun peut-il me dire où je peux trouver un exemple ?
merci d'avance pour votre aide !