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

Langage PHP Discussion :

Fonction pour ordonner les résultats de ma recherche


Sujet :

Langage PHP

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 Fonction pour ordonner les résultats de ma recherche
    Bonjour,
    j'ai une page php qui me réalise une recherche en fonction de 5 variable entrées par l'utilisateur puis surligne ces 5 variables dans mon entrée symptomes de ma base. Or ma base est mal foutu et j'aimerai que si deux symptômes sont présents dans une maladie et que les autres n'ont qu'un symptome elle doit etre placé avant:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     if ($nbr==5) { 
       $requete=mysql_query( "select * from diagnostique     WHERE  'sexe' LIKE '%$Sexe%' 
       and $Age<age_max and $Age>age_min 
       and ('symptomes' LIKE '%$Sympt1%' 
       or 'symptomes' LIKE '%$Sympt2%' 
       or 'symptomes' LIKE '%$Sympt3%' 
       or 'symptomes' LIKE '%$Sympt4%' 
       or 'symptomes' LIKE '%$Sympt5%')") or die (" ==> " . mysql_error()); 
       } 
      $total = mysql_num_rows($requete); 
      //echo $total."<br />"; 
     
      if (!$requete) 
       { 
       echo " <br/> <br/> <p align=center>Impossible d'exécuter la requête sql dans la base.</p> <br/> <p align=center> <img src='erreur.gif' /></p><p align=center><br/> <div id=\"HP\"><a href=\"E-diagno.php\">Retour</a></div></p> " . mysql_error(); 
       echo '</section></body><footer> <center>Projet ISN 2013 E-Docteur® - Tous droits réservés.</center></footer></html>'; 
       exit; 
       } 
     
     if ($total==0) 
     { 
     echo '<br/><br/><center>Aucune maladie trouvée.</p> <p> <img src="erreur.gif" /><br/><div id="HP"><a href="E-diagno.php">Retour</a></div></p></center>'; 
     echo '</section></body><footer> <center>Projet ISN 2013 E-Docteur® - Tous droits réservés.</center></footer></html>'; 
     exit; 
     } 
     
    if ($requete) 
    {  
    echo ' <div id="info"><p>Vous trouverez dans le tableau ci-dessous le(s) résultat(s) de votre requête. Les maladies les plus probables ayant au moins un <span style="font-weight:bold; color:red;"> symptôme correspondant </span> ont été sélectionnées. Si vous ne retrouvez pas l\'un de vos symptômes choisis précedemment, c\'est que la base de données ne comporte pas de maladies répondant à l\'ensemble de vos critères.</p> </div> '; 
        echo 
    '<div id="lien"> 
    <p align=center> 
        <table width=630 border=0 cellpadding=0 cellspacing=0> 
     
            <tr> 
                <td style="border: 0px;" height=22> </td> 
                <td valign=top style="background-image: url(ok.png)"><b><p align=center>NOM</p></b> </td> 
     
                <td valign=top style="background-image: url(ok.png)"><b><p align=center>SYMPTÔMES</p></b> </td> 
             </tr> 
            <tr> 
    '; 
     
        // définition de la liste des symptômes à surligner   
        $symptoms = array( 
            $Sympt1, 
            $Sympt2, 
            $Sympt3, 
            $Sympt4, 
            $Sympt5 
        ); 
     
        // fonction : recherche symptômes et surlignage 
        $highlight_symptoms = 
            function($p) use ($symptoms) 
            { 
                foreach ($symptoms as $v) 
                { 
                    $p = str_replace($v, '<span style=" color: red; font-weight:bold;">'.$v.'</span>', $p); 
                } 
     
                return $p; 
            }; 
     
     
        while ($row = mysql_fetch_array($requete)) 
        { 
            echo 
    <<<HTML 
                <td style="border: 0px;" height=22> </td> 
                <td valign=top>{$row['nom']}</td> 
                 
                <td valign=top>{$highlight_symptoms($row['symptomes'])}</td> 
            </tr> 
    HTML; 
        } 
     
        echo' 
        </table> 
    </p> 
    </div> 
    <br/>';
    pour tester:
    http://e-docteur.legtux.org/Diagnostic/E-diagno.php
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    ya une demande similaire le mois dernier sur ce forum.

    j'avais proposé une solution simple en N requetes et 1 seul plan d'execution, même si il est tentant d'essayer de faire tout en 1 requete. Le SQL est un language adapté à trouver des données, pas à classer celle-ci par pertinence.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    tu peut aussi faire un count de chaque symptome pour chaque maladie et ordonner par nombre de symptome.

  4. #4
    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
    Disons que mon entrée symptôme a les différents symptômes des maladies séparés par des virgules... Donc je peux pas faire un count avec la rayère actuelle je ne peux que afficher les maladies aune au moins un symptôme correspondant! Ne pourrais je pas trier les résultats apreS avoir appliqué la requête actuelle?

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Vous allez devoir passer par du code applicatif pour faire votre trie,

    récupérer les maladies dans un tableau faire un split des symptômes puis utiliser la fonction usort en écrivant vous même votre fonction de trie en fonction du nombre de symptôme.

    Cepandant ceci est du bidouillage. Quand on utilise un SGBD il vaut mieu perdre un peut de temps pour normaliser son modèle de données pour ensuite être tranquile dans la rédactions des requêtes, plutôt que de vouloir tous de suite sauter sur le code applicatif et se retourver face à des requêtes impossible à écrire et devoir bidouiller avec du code applicatif.

  6. #6
    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
    Ok donc c'est possible niveau applicatif, par contre je sèche un peu je ne maitrise pas totalement le php, quels sont étapes à suivre pour faire la fonction?

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/07/2011, 10h00
  2. [SP-2010] Problème pour les résultats de la recherche
    Par ghanem86 dans le forum SharePoint
    Réponses: 9
    Dernier message: 02/12/2010, 15h57
  3. Réponses: 4
    Dernier message: 29/09/2005, 11h50
  4. fonction pour lire les fichier audio
    Par tarek007 dans le forum Multimédia
    Réponses: 1
    Dernier message: 11/05/2005, 16h28
  5. Réponses: 2
    Dernier message: 04/09/2004, 10h53

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