Je vous envoie la base ACCESS en fichier joint pour simplifier les choses
Voila le PB :
La table 'commerce' contient parmi d'autres champs la clé de la catégorie
principale (d'activité) ainsi que le cle de la sous catégorie
Respectivement(ID_Categorie et ID_SsCategorie)
La table 'Categorie' elle, possède la clé primaire ID_Categorie ainsi que le
nom de la categorie
La table 'SsCategorie' contient les sous catégories rattachées aux
ID_Categorie de la table Categorie ainsi que leur nom (Nom_SsCategorie)
Je dois formuler une requete qui doit retourner ceci :
(quand je passe en paramètre ID_Categorie , depuis une combo de la liste des
catégories)
Exemple ici : 52 (restaurants)
Les resultat comme vous le voyez sont le nombre de comme pour chaque sous
catégorie ..
- Asiatiques (Restaurants) 61 résultats
- Brasseries (Restaurants) 48 résultats
- Creperies (Restaurants) 14 résultats
- Gastronomique (Restaurants) 19 résultats
- Grillades (Restaurants) 34 résultats
- Originaux (Restaurants) 33 résultats
- Pizzerias (Restaurants) 94 résultats
- Restauration à domicile (Restaurants) 23 résultats
Jusqu'ici c'est simple de la faire en plusieurs requetes imbriquees mais ce
n'est pas possible car cette algorithme de recherche doit servir aussi pour
ce qui va suivre .
On aurait pu faire :
1] Select toutes les sous-categories where id_categorie=52 dans sscategorie
2] select count de l'index de la sous categorie
{ écrire le résultat}
2'] movenext
1'] movenext
Mais ce la ne va pas car c'est trop long , la table contient en realite
plusieurs milliers d'enregistrements a filtrer
Donc les boucles ne sont pas trop recommandées
Et aussi du fait que l'on peut aussi passer en paramètre un critère de
recherche (mot(s)-clé(s))supplémentaire du type STRING qui devra, lui, en
plus de parcourir dans cette requette :
Les champs suivants :
Voila le probleme, ce qui tend à optimiser la recherche en utilisant des
'XOR' pour chacun des criteres ci-dessus, ne fait en fait que la compliquer
Je dois donc pour eviter des ralentissements de l'ordre de 10 a 15 secondes
par recherche comme j'avais auparavant , trouver un algorithme qui puisse
supporter tous ces paramètres en un seul passage, tout en tenant compte du
fait que les deux parametres peuvent interagir ensemble ou séparement !!!!!
(1 et 1 ,1 et 0,0 et 1)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
bonjour;
Pouvez vous donner la description de vos tables sous forme d'ordre SQL afin que tout un chacun puisse reproduire votre problème et vous donner une solution. Ajoutez un jeu d'essais sous forme d'insert, comme dans cet exemple :
-- Le résultat attendu : NOM VILLE NOMBRE ------ ---------- ------ MARTIN PARIS 2 DUPOND STRASBOURG 3 ...
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Fred a écrit:
Bonjour,
Je vous envoie la base ACCESS en fichier joint pour simplifier les choses
Voila le PB :
La table 'commerce' contient parmi d'autres champs la clé de la catégorie principale (d'activité) ainsi que le cle de la sous catégorie Respectivement(ID_Categorie et ID_SsCategorie)
La table 'Categorie' elle, possède la clé primaire ID_Categorie ainsi que le nom de la categorie La table 'SsCategorie' contient les sous catégories rattachées aux ID_Categorie de la table Categorie ainsi que leur nom (Nom_SsCategorie)
Je dois formuler une requete qui doit retourner ceci : (quand je passe en paramètre ID_Categorie , depuis une combo de la liste des catégories)
Exemple ici : 52 (restaurants)
Les resultat comme vous le voyez sont le nombre de comme pour chaque sous catégorie ..
- Asiatiques (Restaurants) 61 résultats
- Brasseries (Restaurants) 48 résultats
- Creperies (Restaurants) 14 résultats
- Gastronomique (Restaurants) 19 résultats
- Grillades (Restaurants) 34 résultats
- Originaux (Restaurants) 33 résultats
- Pizzerias (Restaurants) 94 résultats
- Restauration à domicile (Restaurants) 23 résultats
Jusqu'ici c'est simple de la faire en plusieurs requetes imbriquees mais ce n'est pas possible car cette algorithme de recherche doit servir aussi pour ce qui va suivre .
On aurait pu faire :
1] Select toutes les sous-categories where id_categorieR dans sscategorie 2] select count de l'index de la sous categorie { écrire le résultat} 2'] movenext 1'] movenext
Mais ce la ne va pas car c'est trop long , la table contient en realite plusieurs milliers d'enregistrements a filtrer Donc les boucles ne sont pas trop recommandées
Et aussi du fait que l'on peut aussi passer en paramètre un critère de recherche (mot(s)-clé(s))supplémentaire du type STRING qui devra, lui, en plus de parcourir dans cette requette : Les champs suivants :
Voila le probleme, ce qui tend à optimiser la recherche en utilisant des 'XOR' pour chacun des criteres ci-dessus, ne fait en fait que la compliquer
Je dois donc pour eviter des ralentissements de l'ordre de 10 a 15 secondes par recherche comme j'avais auparavant , trouver un algorithme qui puisse supporter tous ces paramètres en un seul passage, tout en tenant compte du fait que les deux parametres peuvent interagir ensemble ou séparement !!!!! (1 et 1 ,1 et 0,0 et 1)
Merci de votre aide
Fred
bonjour;
Pouvez vous donner la description de vos tables sous forme d'ordre SQL afin que
tout un chacun puisse reproduire votre problème et vous donner une solution.
Ajoutez un jeu d'essais sous forme d'insert, comme dans cet exemple :
-- Le résultat attendu :
NOM VILLE NOMBRE
------ ---------- ------
MARTIN PARIS 2
DUPOND STRASBOURG 3
...
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Fred a écrit:
Bonjour,
Je vous envoie la base ACCESS en fichier joint pour simplifier les choses
Voila le PB :
La table 'commerce' contient parmi d'autres champs la clé de la catégorie
principale (d'activité) ainsi que le cle de la sous catégorie
Respectivement(ID_Categorie et ID_SsCategorie)
La table 'Categorie' elle, possède la clé primaire ID_Categorie ainsi que le
nom de la categorie
La table 'SsCategorie' contient les sous catégories rattachées aux
ID_Categorie de la table Categorie ainsi que leur nom (Nom_SsCategorie)
Je dois formuler une requete qui doit retourner ceci :
(quand je passe en paramètre ID_Categorie , depuis une combo de la liste des
catégories)
Exemple ici : 52 (restaurants)
Les resultat comme vous le voyez sont le nombre de comme pour chaque sous
catégorie ..
- Asiatiques (Restaurants) 61 résultats
- Brasseries (Restaurants) 48 résultats
- Creperies (Restaurants) 14 résultats
- Gastronomique (Restaurants) 19 résultats
- Grillades (Restaurants) 34 résultats
- Originaux (Restaurants) 33 résultats
- Pizzerias (Restaurants) 94 résultats
- Restauration à domicile (Restaurants) 23 résultats
Jusqu'ici c'est simple de la faire en plusieurs requetes imbriquees mais ce
n'est pas possible car cette algorithme de recherche doit servir aussi pour
ce qui va suivre .
On aurait pu faire :
1] Select toutes les sous-categories where id_categorieR dans sscategorie
2] select count de l'index de la sous categorie
{ écrire le résultat}
2'] movenext
1'] movenext
Mais ce la ne va pas car c'est trop long , la table contient en realite
plusieurs milliers d'enregistrements a filtrer
Donc les boucles ne sont pas trop recommandées
Et aussi du fait que l'on peut aussi passer en paramètre un critère de
recherche (mot(s)-clé(s))supplémentaire du type STRING qui devra, lui, en
plus de parcourir dans cette requette :
Les champs suivants :
Voila le probleme, ce qui tend à optimiser la recherche en utilisant des
'XOR' pour chacun des criteres ci-dessus, ne fait en fait que la compliquer
Je dois donc pour eviter des ralentissements de l'ordre de 10 a 15 secondes
par recherche comme j'avais auparavant , trouver un algorithme qui puisse
supporter tous ces paramètres en un seul passage, tout en tenant compte du
fait que les deux parametres peuvent interagir ensemble ou séparement !!!!!
(1 et 1 ,1 et 0,0 et 1)
Pouvez vous donner la description de vos tables sous forme d'ordre SQL afin que tout un chacun puisse reproduire votre problème et vous donner une solution. Ajoutez un jeu d'essais sous forme d'insert, comme dans cet exemple :
-- Le résultat attendu : NOM VILLE NOMBRE ------ ---------- ------ MARTIN PARIS 2 DUPOND STRASBOURG 3 ...
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Fred a écrit:
Bonjour,
Je vous envoie la base ACCESS en fichier joint pour simplifier les choses
Voila le PB :
La table 'commerce' contient parmi d'autres champs la clé de la catégorie principale (d'activité) ainsi que le cle de la sous catégorie Respectivement(ID_Categorie et ID_SsCategorie)
La table 'Categorie' elle, possède la clé primaire ID_Categorie ainsi que le nom de la categorie La table 'SsCategorie' contient les sous catégories rattachées aux ID_Categorie de la table Categorie ainsi que leur nom (Nom_SsCategorie)
Je dois formuler une requete qui doit retourner ceci : (quand je passe en paramètre ID_Categorie , depuis une combo de la liste des catégories)
Exemple ici : 52 (restaurants)
Les resultat comme vous le voyez sont le nombre de comme pour chaque sous catégorie ..
- Asiatiques (Restaurants) 61 résultats
- Brasseries (Restaurants) 48 résultats
- Creperies (Restaurants) 14 résultats
- Gastronomique (Restaurants) 19 résultats
- Grillades (Restaurants) 34 résultats
- Originaux (Restaurants) 33 résultats
- Pizzerias (Restaurants) 94 résultats
- Restauration à domicile (Restaurants) 23 résultats
Jusqu'ici c'est simple de la faire en plusieurs requetes imbriquees mais ce n'est pas possible car cette algorithme de recherche doit servir aussi pour ce qui va suivre .
On aurait pu faire :
1] Select toutes les sous-categories where id_categorieR dans sscategorie 2] select count de l'index de la sous categorie { écrire le résultat} 2'] movenext 1'] movenext
Mais ce la ne va pas car c'est trop long , la table contient en realite plusieurs milliers d'enregistrements a filtrer Donc les boucles ne sont pas trop recommandées
Et aussi du fait que l'on peut aussi passer en paramètre un critère de recherche (mot(s)-clé(s))supplémentaire du type STRING qui devra, lui, en plus de parcourir dans cette requette : Les champs suivants :
Voila le probleme, ce qui tend à optimiser la recherche en utilisant des 'XOR' pour chacun des criteres ci-dessus, ne fait en fait que la compliquer
Je dois donc pour eviter des ralentissements de l'ordre de 10 a 15 secondes par recherche comme j'avais auparavant , trouver un algorithme qui puisse supporter tous ces paramètres en un seul passage, tout en tenant compte du fait que les deux parametres peuvent interagir ensemble ou séparement !!!!! (1 et 1 ,1 et 0,0 et 1)
Merci de votre aide
Fred
jmn
Cher Fred, ne vous embêtez pas avec ça ! Votre problème est tout à fait classique (basique ?) et se plonge dans la classe des comptages dans une base de données relationnelle.
Vous devez étudiez les clauses Count, Group by et les jointures pour répondre à votre besoin. Count(nom_de_champ) pour compter vos boutiques group by pour déterminer les sous ensembles à compter join pour lier les tables entre elles...
par exemple, sans reprendre vos noms de variables :
select count(id_boutique) as nbr, categories.libcategorie, souscategorie.libsouscategorie from (boutiques left join sous_categorie on boutique.code_categorie=sous_categorie.code_categorie and boutique.code_souscategorie=sous_categorie.code_souscategorie) left join boutique.code_categorieÊtegorie.code_categorie where <vos critères s'appliquant sur une des trois tables> group by categories.libcategorie, souscategorie.libsouscategorie
Cher Fred,
ne vous embêtez pas avec ça ! Votre problème est tout à fait classique
(basique ?) et se plonge dans la classe des comptages dans une base de
données relationnelle.
Vous devez étudiez les clauses Count, Group by et les jointures pour
répondre à votre besoin.
Count(nom_de_champ) pour compter vos boutiques
group by pour déterminer les sous ensembles à compter
join pour lier les tables entre elles...
par exemple, sans reprendre vos noms de variables :
select count(id_boutique) as nbr, categories.libcategorie,
souscategorie.libsouscategorie from (boutiques left join sous_categorie on
boutique.code_categorie=sous_categorie.code_categorie and
boutique.code_souscategorie=sous_categorie.code_souscategorie) left join
boutique.code_categorieÊtegorie.code_categorie where <vos critères
s'appliquant sur une des trois tables> group by categories.libcategorie,
souscategorie.libsouscategorie
Cher Fred, ne vous embêtez pas avec ça ! Votre problème est tout à fait classique (basique ?) et se plonge dans la classe des comptages dans une base de données relationnelle.
Vous devez étudiez les clauses Count, Group by et les jointures pour répondre à votre besoin. Count(nom_de_champ) pour compter vos boutiques group by pour déterminer les sous ensembles à compter join pour lier les tables entre elles...
par exemple, sans reprendre vos noms de variables :
select count(id_boutique) as nbr, categories.libcategorie, souscategorie.libsouscategorie from (boutiques left join sous_categorie on boutique.code_categorie=sous_categorie.code_categorie and boutique.code_souscategorie=sous_categorie.code_souscategorie) left join boutique.code_categorieÊtegorie.code_categorie where <vos critères s'appliquant sur une des trois tables> group by categories.libcategorie, souscategorie.libsouscategorie