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 php MySql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut Recherche multicritères php MySql
    Bonjour,
    je suis plus que novice en matière de php et mysql. J'ai fait une bae de données avec plusieurs champs (id, sexe age_min age_max et symptomes). ce que j'ai fait c'est un formulaire en html et javascript qui transmet à ma page rechercher.php les variables $Age, $Sexe et 5 symptômes. Voici le code que j'ai essayé pour effectuer ma recherche:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php  
    $Sexe = $_POST['sexe'];  
    $Age = $_POST['age'];  
    $Sympt1 = $_POST['sympt1'];  
    $Sympt2 = $_POST['sympt2'];  
    $Sympt3 = $_POST['sympt3'];  
    $Sympt4 = $_POST['sympt4'];  
    $Sympt5 = $_POST['sympt5'];  
     
    session_start(); 
    $DBName= "mydb"; 
    $userName = "root"; 
    $DBpasswd = ""; 
    $DBhost = "localhost"; 
     
     
    if(empty($Sympt1) || empty($Age)|| empty($Sexe)) { 
    echo 'Veuillez-vérifier que le sexe, l\'âge de l\'utilisateur et au moins un symptôme sont précisés.';}  
    else{ 
    $requete="SELECT * FROM diagnostique  
    WHERE sexe LIKE '$sexe'  
    AND age_min <= '$age' AND age_max >= '$age'  
    AND (symptomes LIKE '%$Sympt1%')  
    or (symptomes LIKE '%$Sympt2%')  
    or (symptomes LIKE '%$Sympt3%')  
    or (symptomes LIKE '%$Sympt4%')  
    or (symptomes LIKE '%$Sympt5%')" 
    } 
     
     
    ?>


    Ce que je voulais effectuer c'est une recherche qui prenne en compte l'âge et le sexe de façon essentielle c'est à dire que si l'âge n'est pas compris entre age_min et age_max, la maladie ne ressort pas à la recherche. Après pour la recherche au niveau des symptômes, je voudrait que ça soit la maladie qui a le bon sexe et le bon âge et ayant le plus de symptôme correspondant qui ressorte, ou disons les 2-3 correspondant le plus. Si vous pouviez m'aider, je vous remercie par avance!
    Pour ma BDD ça donne: id int nom varchar (100) sexe varchar (2) soit F pour féminin M pour masculin ou FM quand c'est les deux, age_min int age_max et symptomes varchar (1000)

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il vaudrait mieux avoir

    une table symptome
    id _ nom

    une table de liaison maladie_symptome
    id maladie_id symtome_id
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut
    Bonjour, c'est ce que j'avais pensé au début mais je ne suis que lycéen en S, autant vous dire que l'informatique c'est pas ce qu'on nous enseigne en priorité.. Je n'ai que deux heures par semaines mais beaucoup plus en travail personnel pour apprendre de mon côté. Le fait d'avoir plusieurs table m'a effrayé.. Sinon qu'en pensez-vous, ça peut marcher comme ça?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca te permettra de compter facilement le nombre de symptomes :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT maladie_id, count(*) FROM maladie_symptome WHERE symptome IN (1, 45, 87) GROUP BY maladie_id ORDER BY count(*) DESC

    Et de proposer une liste de symptomes à choisir.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut
    Rebonjour, ce code est adapté à ma base de données? Je suis désolé mais je ne vois pas à quoi ça me servira, si vous pouvez m'éclairer. Merci de prêter attention à mon cas.
    Ps: les utilisateurs peuvent accéder à une exhaustive liste de symptômes dans le formulaire avec des listes déroulantes liées en fonction des zones du corps

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Non c'est en rapport avec la structure que je te préconise.
    Si en plus tu as déjà une liste de symptomes, ca serait dommage de ne pas la mettre en base de données.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut problème trie requête sql
    Bonjour à tous,
    ma table est la suivante: id, sexe, nom_maladie, age_min, age_max, et symptomes
    j'ai fait un formulaire pour récupérer les données auprès de l'utilisateur et j'effectue la requête suivante:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM diagnostique WHERE sexe LIKE '%$sexe%' AND age_min <= '$age' AND age_max >= '$age' AND (symptomes LIKE '%$Sympt1%') or (symptomes LIKE '%$Sympt2%') or (symptomes LIKE '%$Sympt3%') or (symptomes LIKE '%$Sympt4%') or (symptomes LIKE '%$Sympt5%');

    Malheureusement la recherche me renvoie de très nombreux résultats que je souhaiterai trier. J'aimerai que la recherche m'affiche les 5 maladies les plus correspondantes par rapport aux 5 symptômes. J'ai donc penser à ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM diagnostique WHERE sexe LIKE '%$sexe%' AND age_min <= '$age' AND age_max >= '$age' AND (symptomes LIKE '%$Sympt1%') or (symptomes LIKE '%$Sympt2%') or (symptomes LIKE '%$Sympt3%') or (symptomes LIKE '%$Sympt4%') or (symptomes LIKE '%$Sympt5%') ORDER BY diagnostique LIMIT 5;
    Mais cela ne marche pas. Merci d'avance à vous.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je pense qu'il n'y a pas grand chose à faire de sérieux avec ça.

    Tu peux bien faire un truc moche comme ça, ça doit marcher
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *,
    IF(
    symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 5,
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%', 4, 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%', 3,
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%', 2, 
    1)))
    ) as Nbre
    FROM diagnostique WHERE sexe LIKE '%$sexe%' AND age_min <= '$age' AND age_max >= '$age' AND (symptomes LIKE '%$Sympt1%') or (symptomes LIKE '%$Sympt2%') or (symptomes LIKE '%$Sympt3%') or (symptomes LIKE '%$Sympt4%') or (symptomes LIKE '%$Sympt5%')
    ORDER BY Nbre DESC;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut
    Si j'avais du temps devant moi et tes connaissances dans le language SQl sans aucuns doûtes que j'aurai refait ma table comme tu me l'as suggéré! Maintenant je reconnait moi-même que ça n'a rien de professionnel et que ça peut te paraître assez médiocre! Je vais de ce pas essayer ta solution qui je pense va beaucoup m'aider! Je te remercie beaucoup.

  10. #10
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 26
    Par défaut
    ta méthode marche très bien mais je me demandais si il ne fallait pas envisager beaucoup plus de cas que ça quelque chose comme ça:
    Code sql : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT *,
    IF(symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 5,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%', 4,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt5%', 4,) 
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 4,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 4,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt4%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%', 3,)
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 3,)
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt2%', 2,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt3%', 2,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt4%', 2,) 
    IF (symptomes LIKE '%$Sympt1%' AND symptomes LIKE '%$Sympt5%', 2,) 
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt3%', 2,) 
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt4%', 2,) 
    IF (symptomes LIKE '%$Sympt2%' AND symptomes LIKE '%$Sympt5%', 2,) 
    IF (symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt4%', 2,) 
    IF (symptomes LIKE '%$Sympt3%' AND symptomes LIKE '%$Sympt5%', 2,) 
    IF (symptomes LIKE '%$Sympt4%' AND symptomes LIKE '%$Sympt5%', 2,) 
    IF (symptomes LIKE '%$Sympt1%' 1,) 
    IF (symptomes LIKE '%$Sympt2%' 1,) 
    IF (symptomes LIKE '%$Sympt3%' 1,) 
    IF (symptomes LIKE '%$Sympt4%' 1,) 
    IF (symptomes LIKE '%$Sympt5%' 1,) 
    ) as Nbre
    FROM diagnostique WHERE sexe LIKE '%$sexe%' AND age_min <= '$age' AND age_max >= '$age' AND (symptomes LIKE '%$Sympt1%') or (symptomes LIKE '%$Sympt2%') or (symptomes LIKE '%$Sympt3%') or (symptomes LIKE '%$Sympt4%') or (symptomes LIKE '%$Sympt5%')
    ORDER BY Nbre DESC;

Discussions similaires

  1. [MySQL] Recherche multicritères PHP/MySQL
    Par didigue dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/09/2008, 14h32
  2. [MySQL] créer un moteur de recherche en php/mysql
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/05/2007, 12h52
  3. Recherche multicritère PHP-MySql
    Par pod1978 dans le forum Débuter
    Réponses: 4
    Dernier message: 14/10/2006, 23h52
  4. Requête multicritère PHP-Mysql
    Par pod1978 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/05/2006, 18h42

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