|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Fodé LevtchenkoElève-ingénieur Inscription : avril 2010 Messages : 11 ![]() |
Bonjour,
je suis en train de développer un formulaire(sous forme de checkbox) selon lequel un internaute peut effectuer des recherches dans ma base selon plusieurs criteres. Il existe donc plusieurs combinaisons pour traiter ces requetes. EX: Choix critere 1 rouge bleu noir ... Choix critere2 balle de tennis balle ping pong balle foot ..... L'utilisateur peut choisir plusieurs critères de Choix 1 en les combinant aux critères de Choix 2. J'ai donc écrit une fonction pour générer une requête en fonction des critères choisis. Mais je rencontre des problèmes dans d'autres fonctions qui font que je peux pas tester mon script. Je voudrais donc savoir pour etre rassuré est ce qu'une requête du genre : T1 union T2 union T3 union T4 IN (T11 union T12 union T13); est syntaxiquement correct. Les Ti representent des select id from table where colonne='attribut x' Merci d'avance pour vos réponses. |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Bonjour, non.
Peut-etre pourriez-vous présenter correctement votre besoin afin que l'on vous oriente un peu mieux ? (sgbd, table, exemple de résultat voulu, ...) |
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() |
Citation:
Précisez votre SGBD merci.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Fodé LevtchenkoElève-ingénieur Inscription : avril 2010 Messages : 11 ![]() |
Bonjour,
tout d'abord je vous remercie pour votre intérêt. J'utilise postgresql comme sgbd. J'ai une table entreprise qui contient: l'id de l'entreprise,nom,métier,ville, longitude,latitude (ces coordonnées géographique sont utilisés pour localiser apres l'entreprise sur la carte). L'utilisateur doit pouvoir effectuer une recherche par ville et/ou par metier de l'entreprise. Ex: je veux les coordonnées géographique des entreprises qui se trouvent dans Paris,Lille,Bordeaux dont le métier principal est : logistique,réseau,informatique. L'idée que j'ai eu donc ,c'est de generer en premier une requete pour chaque metier coché dans le formulaire. Puis de faire l'union entre les requetes générées pour d'autres metiers. Idem pour les villes. Et enfin pour lier la sous-requete ville avec la requete metier, j'utilise un IN. |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
donc si je comprend bien :
une entreprise va avoir autant d’occurrence dans votre table qu'elle n'a de métier et qu'elle n'a de géolocalisation différente ....? Par exemple : Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Fodé LevtchenkoElève-ingénieur Inscription : avril 2010 Messages : 11 ![]() |
Oui exactement, c'est bien ca.
Il existe peut être un autre moyen...? |
|
|
00
|
|
|
#7 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
ce serait bien d'avoir la structure de la (des) table(s). Mais j'ai l'impression qu'il n'y en a qu'une et comme le sous-entend Punkoff, il y aurait un souci dans la modelistation de la base... tres rapidement, il faudrait une table 'entreprise', une table 'activite', une table 'ville' et enfin une table des 'activite des entreprises'. cela permetterai de construire des requetes plus 'rigoureuses' pour un probleme, somme toute, pas si complexe |
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
je dirai comme dehorter olivier.
Vous avez un énorme problème de modélisation (edit : vu le poste que vous avez delete, c'est pas si horrible que ca.) Et le schéma sera plus complexe que celui annoncé juste au dessus, mais c'est un bon début. Mais quand vous allez avoir pas mal de données dans votre table vous allez vous tirer les cheveux pour faire vos requêtes. Prenons un exemple simple, notre entreprise A a 3 antennes dans paris, une qui fait de la logistique, une autre du réseau, une autre de l'informatique et du réseau, ... Bref si vous renoncez à changer de schéma, il faudrait poser un exemple complet, avec les données en base (fictive bien entendu) qui couvre tous les cas fonctionnels possibles + le résultat attendu. Et là on pourrait surement trouver une solution (bancale). Sinon une requête type qui pourrait vous aider dans votre recherche : Code :
Après il faudra surement la recouper avec la même requête pour les villes.. Dans le genre : Code :
|
||||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Fodé LevtchenkoElève-ingénieur Inscription : avril 2010 Messages : 11 ![]() |
Hmm, ok merci pour cette mega-requete
Mais le bleme est que l'utilisateur peut cocher n-activités et n-villes, bon pour ce cas il y en a que 14 activités et 8 villes. Est ce qu'il est possible de faire Code :
|
||
|
|
00
|
|
|
#10 | |||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
joli punkoff
![]() pour scoleproj pour rendre cette idee plus generale (pour tenir compte du nombre variable de criteres) ce que tu ne faisait dans ta requete (j'ai un probleme dans ce type de notation ??? Citation:
Code :
si des familles de criteres ne sont pas selectionnees, je ne vois pas d'autres solutions que d'ecrire une requete pour chaque cas 1 une pour ville et logistique 1 pour logistique seule 1 pour ville seule a moins que punkoff qui a l'air bien plus balaise que moi ![]() a+ |
|||
|
|
00
|
|
|
#11 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
c'était un exemple mais qui ne répondra pas entièrement à votre besoin actuel.
D’ailleurs en la reprenant je vois qu'elle est fausse pour la 2eme partie, car elle pourrait sélectionner des entreprises qui n'ont pas le métier voulu dans les villes voulus ... Ceci est dû au manque de la table d'association ville / métier / entreprise. Sinon, pour en adapter le principe dans votre code il va falloir aussi changer la valeur du having count(distinct X) par votre nombre de critere de recherche. edit: pour votre dernière requête ne pouvez-vous pas tout simplement compter le nombre de critere dans votre liste retourné par le serveur ? En y repenssant il faudrai plutot voir une modélisation dans ce genre (à confirmer par quelqu'un qui à plus de bouteille que moi dans ce secteur) : T_entreprise (id, idEntreprise (SIRET, ..), nom, siege, ....) T_antenne (id, id_ent (FK sur R_entreprise), geoX, geoY, adresse, ...) T_metier(id, description, code (NAF / APE), ...) T_ville(id, nom, ...) R_ANTENNE_METIER(id_ant (fk antenne), id_met (fk metier)) R_ANT_VILLE (id_vill (fk ville), id_ant (fk antenne)) Bon avec ca on peut quadriller précisément vos besoin je penses. Ressortir toutes les entreprise dans une ville donnée : Code :
Code :
|
||||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Fodé LevtchenkoElève-ingénieur Inscription : avril 2010 Messages : 11 ![]() |
Salut,
Desolé mais j'ai pas bien precisé le contexte, mais dans ce cas une entreprise est localisé dans 1 ville, et une entreprise n'a qu'un seul metier. Les attributs metier et ville dans la table entreprise sont bien des clefs étrangères => pas besoin de faire des jointures entre les tables pour retrouver la ville d'une entreprise. Donc du coup j'ai essayé avec cette requete qui m'a renvoyé le bon resultat: Code :
SELECT geox,geoy FROM entreprise e WHERE e.metier IN ('reseau','logistique') AND e.ville IN ('paris','lyon');
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com