[SQL] moteur de recherche avec trois critères
Xtrang
-
Kobaya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
Kobaya Messages postés 282 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- [SQL] moteur de recherche avec trois critères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Copernic Desktop Search - Télécharger - Utilitaires
- Recherche de pairs utorrent ✓ - Forum Téléchargement
2 réponses
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
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
Salut,
Bien ca doit marcher normalement, enfin au niveau du principe:
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:
par contre, j'ai peut etre mal compris mais dans ton exemple tu pourrais faire simplement une égalité '=' non ?
Bon courage
A++
Hexanium
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