[SQL] moteur de recherche avec trois critères

Fermé
Xtrang - 26 avril 2005 à 16:40
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 - 26 avril 2005 à 17:01
Bonjour,

Je voudrai avoir un petit coup de pouce concernant une instruction SQL pour un moteur de recherche assez simpliste.

Présentation rapide du moteur :
Le moteur exploite une base de données d'adresses d'associations. Il est construit sur trois critères :

- "categorie" sous forme de groupe de boutons : 15-25ans ; 25-35ans ; +de 35ans
- "soucat" sous forme de checkbox : convivialité ; loisirs ; militantisme
- "departement" sous forme de deux chiffres.

J'ai réussi à traduir toutes les requêtes possibles sachant que "categorie" est obligatoire. J'ai donc :
- soucat rempli mais pas departement
- departement rempli mais pas soucat
- rien rempli
- tout rempli

Le problème c'est que je n'arrive pas à traduir la dernière possibilité en langage SQL. J'ai effectivement déjà pu remarquer que SQL ne prenait pas plus de deux égalités à la suite :

$query_cat = sprintf("SELECT * FROM m_assos WHERE categorie LIKE '%%%s%%' AND soucat LIKE '%%%s%%' AND departement = '%s'", $colname_cat, $colname2_cat, $colname3_cat,);

Comment rédiger cette ligne de code de façon à ce que SQL prennent bien en compte les 3 critères pour me ramener les résultats de la base de données ?


Merci d'avance.
A voir également:

2 réponses

Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
26 avril 2005 à 16:53
hello,

1/ pour commencer les %% ne servent à rien, un seul suffit. Donc :
$query_cat = sprintf("SELECT * FROM m_assos WHERE categorie LIKE '%s%' AND soucat LIKE '%s%' AND departement = '%s'", $colname_cat, $colname2_cat, $colname3_cat,);

2/ le champ departement est numérique doncpas de s dans ce champ
$query_cat = sprintf("SELECT * FROM m_assos WHERE categorie LIKE '%s%' AND soucat LIKE '%s%' AND departement = " & intDep & ", $colname_cat, $colname2_cat, $colname3_cat,);

intDep est une variable contenant le numéro de département voulu.

avec cette requête, tu ramènes les enregistrements où categorie contient la lettre s, soucat contient la lettre s et oùle département est égal à la au contenu de la variable intDep

0
Salut,

Bien ca doit marcher normalement, enfin au niveau du principe:

SELECT 
             *
FROM
             m_asso
WHERE
            categorie LIKE( 'cat1', 'cat2',...)            AND
            soucat LIKE( 'soucat1', 'souscat2',...)  AND
           departement = 93


Apres dans ton idée je sais pas trop mais y'a un truc qui me chifone. je m'explique:
- Département est un choix fixe: 01 ou 23 ou 93 etc...
- Categorie aussi '15-25' OU '25-35' OU...
- SousCat pareille

En plus tu precise que Categorie et SousCat sont soit des RadioButton soit des CheckBox donc choix unique par option.

Ce qui me chiffone c'est que LIKE c'est pour les choix multiples, si par exemple tu cherchais les recordes qui fonc a la fois partie de par exemple convivialité ET loisirs alors la le LIKE est nécessaire:

SELECT 
             *
FROM
             m_asso
WHERE
            ...
            soucat LIKE( 'convivialité', 'loisirs',...)
           ...


par contre, j'ai peut etre mal compris mais dans ton exemple tu pourrais faire simplement une égalité '=' non ?

Bon courage

A++

Hexanium
0
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
26 avril 2005 à 17:01
salut Hexanium,

je crois que tu confonds IN et LIKE ;-)

IN s'utilise pour comparer un champ à une liste définie de valeur
LIKE s'utilise avec des caractères joker : % pour 1 ou plusieurs caractères et _ (underscore) pour 1 caractère
0