IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Recherche multicritères [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut Recherche multicritères
    Bonjour.

    Voici mon problème actuel sur lequel je bug depuis quelques jours.

    Je dispose d'une vue MySQL avec le schéma suivant :

    view_recherche(id_employe, id_ui, id_stage, id_produit, id_niveau, id_type, id_categorie, id_offre, id_typeoffre)

    et j'ai besoin d'effectuer une recherche multi critères (dont le nombre de critères est dynamique) afin par exemple de trouver tous les employés qui on effectué le stage 1 et 2 avec un niveau 3 ... je dois être capable de rechercher sur n'importe quel champs. Le résultat a retourner doit toujours être une liste d'id d'employés + id d'ui.

    On m'a orienté vers les tables dérivées mais elles ne me permettent que de sortir pour un seul critère a chaque fois.

    PS : mes critères arrivent sous forme d'array() via POST, un array correspondant a chaque colonne de la table.

    voila si vous pouvez m'aider merci.

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Quel est ton problème exactement ?

    Car ce que tu demande ne revient qu'a générer une requête avec une clause WHERE

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
       id_employe, 
       id_ui 
    FROM view_recherche 
    WHERE 
       id_stage IN (1,2)
       AND id_niveau IN (3)
       AND ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut
    Le problème avec ca c'est qu'il me sort aussi les employés qui n'ont QUE 1 ou QUE 2 ... il faut qu'ils aient les deux obligatoirement pas l'un ou l'autre.

    Par exemple j'ai la recherche suivante :

    Stage : 1
    Niveau : 3

    Stage : 2
    Niveau : 1

    Il devra me sortir les employés ayants effectué le stage 1 de niveau 3 + le stage 2 de niveau 1 et pas seulement l'un des deux.

    J'ai pensé a faire une requête pour chaque critère et a faire un array_intersect() des tableaux que je récupère ensuite en regardant si il y a des employés en commun mais ca me parait lourd alors que ca devrait pouvoir etre fait directement via SQL.

  4. #4
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Ah ok je vois.

    Tu pourrais poster un exemple des array POST que tu récupère ?

    Comment peux tu savoir que le stage 1 va forcement avec le niveau 3 et le stage 2 avec le niveau 1 ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut
    alors par exemple

    un print_r($_POST['stage']) me donnerait pour le cas present

    un print_r($_POST['niveau'])
    ...etc

    L'ordre dans les array() etant l'ordre des criteres soit :
    Critere 1 = stage 1 niveau 2
    Critere 2 = stage 3 niveau 1
    ...

    Il peut y avoir plus de lignes dans les array(), il n'y a pas de maximum.

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Une solution pourrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    	// Filtres
    	$filtre = "";
    	for($i=0; $i<count($_POST['id_stage']); $i++){
    		if($i > 0){ $filtre .= " OR" }
    		$filtre .= " (1=1";
    		if($_POST['id_stage'][$i] != ""){
    			$filtre .= " AND id_stage=".$_POST['id_stage'][$i];
    		}
    		if($_POST['id_produit'][$i] != ""){
    			$filtre .= " AND id_produit=".$_POST['id_produit'][$i];
    		}
    		// idem pour les autres champs ...
    		$filtre .= ")";
    	}
     
    	$query = mysql_query("SELECT id_employe, id_ui FROM view_recherche WHERE".$filtre);
    ?>

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 7
    Par défaut
    Oui mais au final c'est la même chose qu'un simple WHERE (OR indique soit l'un soit l'autre et un AND retourne rien du tout a chaque fois car se basant sur la meme ligne), il sort aussi ceux qui n'ont que l'un des deux critères. Je pense vraiment qu'il faut s'orienter du coté des requêtes imbriquées pour essayer de faire via du SQL, mais n'ayant jamais eu a m'en servir je sèche.

    Sinon j'avais donc la possibilité de faire une requête pour chaque critère et de faites des croisements des résultats via array_intersect() mais autant tout faire via SQL si c'est possible.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire un état d'après recherche multicritère
    Par bilouk dans le forum Access
    Réponses: 4
    Dernier message: 12/01/2006, 19h30
  2. Formulaire Recherche MultiCritère et RunTime
    Par fbu78 dans le forum Runtime
    Réponses: 9
    Dernier message: 06/01/2006, 18h52
  3. Recherche multicritère
    Par Darlay Jean_Louis dans le forum Access
    Réponses: 2
    Dernier message: 26/10/2005, 10h54
  4. Réponses: 2
    Dernier message: 01/10/2005, 19h42
  5. recherche multicritères
    Par onlineduel dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2004, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo