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. :marteau: Je commence à douter qu'un solution existe à part en multipliant les 'OR' avec toutes les variantes possibles.
Code:
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:
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;
} |