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 :

problème complexe de recherche de durée


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Par défaut problème complexe de recherche de durée
    Bonjour j'ai dans une base des temps un peu sous toutes les formes.
    par exemple 1h 10' peut être inscrit sous cette forme mais aussi 70' ou 70'00" ou 70'00 ou 70min00 sec ou bien encore il peut y avoir plusieurs durée pour le même champ si je reprend l'exemple ci-dessus on peut avoir
    3*70'
    ou 1h10' + 25'00
    ou 1h10' (60'+10').
    Je souhaite bien évidemment qu'un utilisateur tape indifféremment 1h10 ou 70'00" et trouve toutes les références j'ai testé beaucoup de choses mais à chaque fois c'est trop ou as assez précis.
    Pour le moment j'ai fait quelque chose comme ça, mais cela retourne trop de résultats, je m'arrache les cheveux qui me reste mais je n'entrevois pas de solution satisfaisante. Je commence à douter qu'un solution existe à part en multipliant les 'OR' avec toutes les variantes possibles.
    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
    //adaptation des durées si 0 heures ou 0 min
      $dureeheure=$_POST[duration0];
     
    IF(($dureeheure<<10)AND (substr($dureeheure, 0, 1)==0) )$dureeheure= substr($dureeheure, 1, 1);
    IF (($dureeheure<=0) OR ($dureeheure==NULL))$dureeheure1=NULL;
    else $dureeheure1=$dureeheure."h";
     
      $dureemin=(($_POST[duration0]*60)+$_POST[duration1]);
      $dureeminuteseul=$_POST[duration1];
      IF (($dureemin<=0) AND ($dureeminuteseul<=0)){
          $dureemin1=NULL;
          $dureemin2 ="00\'";
          $dureemin3="00min";
          $dureeminuteseul1=NULL;
          $dureeminuteseul2="00\'";
          $dureeminuteseul3="00min";
      }
    else {
        $dureemin1=$dureemin."\'";
    $dureemin2=$dureemin."\'";
    $dureemin3=$dureemin."min";
    $dureeminuteseul2=$dureeminuteseul."'";
    $dureeminuteseul3=$dureeminuteseul."min";
    }
      $dureesec=$_POST[duration2];
      IF ($dureesec<=0){
          $duresec1=NULL;
          $duresec2='00\"';
          $duresec3="00s";
      }
      else {
          $duresec1=$dureesec;
          $duresec2=$dureesec.'\"';
         $duresec3=$dureesec."s";
      }
     
      $duree=$dureemin1.$duresec1;
      $duree2=$dureemin2.$duresec2;
      $duree3=$dureemin3.$duresec3;
      //test de recherche des heures
      If ($dureeheure>0){
      IF ($dureeminuteseul>0){
          $dureeminuteseul1=$dureeminuteseul."\'";
          $dureeminuteseul2=$dureeminuteseul."min";
      }
      Else{
          $dureeminuteseul1=NULL;
          $dureeminuteseul2="00\'";
      $dureeminuteseul2="00min";
      }
     
      $duree4="OR DURATION='$dureeheure1$dureeminuteseul1$duresec1'  OR DURATION='$dureeheure1$dureeminuteseul2$duresec3'";
     
      }
     else {
          $duree4=NULL;
      }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //si durée non vide pour une recherche précise
      if (strlen($duree)AND ($compteur>0))
    	 $cherchduree="AND ( duration LIKE '%" . $duree . "%' OR duration = '$duree2'OR duration = '$duree3'$duree4)";
        if (strlen($duree)  AND  ($compteur==0)){
    	 $cherchduree="duration='$duree' ";
      $compteur=1;
      }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    au rythme où ça semble parti : tu comptes perdre tous tes cheveux d'ici combien de temps ?
    C'est ingérable ton système.
    Tu devrais normaliser tes données et sacrément restreindre les possibilités de saisie.
    Si tu persistes dans ton approche, tu devras avoir un sacré paquet de OR dans ton SQL.

  3. #3
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Par défaut
    Je vais m'acheter une perruque alors.
    Le problème est que je récupère les données d'une base File Maker qui a qq années et ou c'est un peu le bordel.
    Les nouvelles données sont plus "normalisé".

Discussions similaires

  1. Problème formulaire de recherche
    Par Kyrha dans le forum Access
    Réponses: 5
    Dernier message: 24/04/2012, 02h44
  2. Réponses: 10
    Dernier message: 11/05/2008, 18h49
  3. [MySQL] Problème moteur de recherche
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/03/2006, 15h16
  4. Problème moteur de recherche htdig
    Par mr_neness dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 09/01/2006, 11h44
  5. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06

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