begin process at 2012 05 31 17:20:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

récupérer des données sur un mois, array des jours occupés


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

récupérer des données sur un mois, array des jours occupés

mardi 22 novembre 2011 à 22:38:07 | récupérer des données sur un mois, array des jours occupés

555clR

Bonsoir !

J'ai deux problèmes auxquels je ne trouve pas de solution :
1/ Le premier se trouve dans ma requête...
Je vous dresse le décor:
- Une table d'évènements avec (entre autres): dates de début(type datetime) et durées(type time)
L'idée serait de récupérer tous les évènements d'un mois :
ceux qui commencent et se finissent le mois en question, mais aussi ceux qui ont débuté le mois précédent et ceux qui se terminent le mois suivant.
J'ai fait cette requête mais elle ne fonctionne pas. Il n'y a pas d'erreur signalée mais elle ne me retourne aucun résultat, alors que des enregistrements sont présents dans la base. je pense avoir fait une erreur mais je ne sais pas où...

Voici mon code :
//Dbt du mois le matin à 00h00
$dbt_mois = 'date(\''.mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']).'\')';
//fin du mois le soir à 00h00
$fin_mois = 'date(DATE_ADD(date(DATE_ADD('.$dbt_mois.', INTERVAL 1 MONTH)), INTERVAL 1 DAY))';
//début evt
$dbt_evt = 'date(event_date_debut)';
//Fin evt
$fin_evt = 'DATE_ADD(event_date_debut,INTERVAL event_duree HOUR_SECOND)';
//condition où : fin evt après dbt du mois && début evt avt fin du mois
$where = '('.$fin_evt.' > '.$dbt_mois.') && ('.$dbt_evt.' <= '.$fin_mois.')';
$sql ='SELECT event_id,event_date_debut,event_duree
FROM evenements
WHERE '.$where.'
ORDER BY day(event_date_debut)';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while ($event = mysql_fetch_array($req))
{
$jourbusy[] = array(
'event_id' => $event['event_id'],
'event_date_debut' => $event['event_date_debut'],
'event_duree' => $event['event_duree']);
}
mysql_free_result ($req);

2/ Le second interviendra immédiatement ensuite : je ne vois pas comment faire pour ensuite récupérer les jours du mois occupés par un évènement? Comment lister ces jours ? Existe t-il une fonction ?

Merci d'avance, toutes les pistes seront les bienvenues.
Bonne soirée à tous
mercredi 23 novembre 2011 à 15:11:52 | Re : récupérer des données sur un mois, array des jours occupés

47

Réponse acceptée !
Bonjour,

d'après la doc de mysql 5, on peut ajouter un time à un timestamp via la commande addtime lien

Code PHP :
// on récupére le début et la fin du mois
$sDebutMois = date('Y-m-d H:i:s', mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']));

$sFinMois = date('Y-m-d H:i:s', mktime(0, 0, 0, $_GET['m']+1, 0, $_GET['y']));

$sWhere = "(event_date_debut >= '$sDebutMois' addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= '$sFinMois'";

$sSQL = 'select event_id, event_date_debut, event_duree '
    . 'FROM evenements '
    . 'WHERE ' . $sWhere;



bonne après midi



mercredi 23 novembre 2011 à 15:13:06 | Re : récupérer des données sur un mois, array des jours occupés

47

Réponse acceptée !
erf et pas d'édition du message ...

j'ai oublié un or dans le where

$sWhere = "(event_date_debut >= '$sDebutMois' or addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= '$sFinMois'";

jeudi 24 novembre 2011 à 02:57:35 | Re : récupérer des données sur un mois, array des jours occupés

555clR

bonsoir et merci de ton aide... c'est en effet plus propre ainsi !!
en fait ça marche également comme je pensais, une erreur dans l'affichage du timestamp de début de mois :

//Dbt du mois le matin à 00h00
$dbt_mois = 'date(\''.$_GET['y'].'-'.$_GET['m'].'-01\')';

...pour la correction quand même, même si ta solution est plus "directe" (et donc plus propre). je valide !

Du coup reste quand même mon 2ème pb, obscur. Comment récupérer le numéro des jours occupés par un évènement (d'autant qu'on sait que certains peuvent se dérouler sur plusieurs jours ? )

Merci de vos contributions, pistes, idées... je ne vois pas bien comment m'y prendre, là...

jeudi 24 novembre 2011 à 07:28:21 | Re : récupérer des données sur un mois, array des jours occupés

555clR

J'ajoute juste ("erf, pas d'édition..."):
la fin du mois correspond au dernier jour du mois à 00h00 (donc le matin !).
Donc juste ajouter au message de 47 soit :
$where = "(event_date_debut >= '$sDebutMois' or addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= DATE_ADD('$sFinMois', INTERVAL 1 DAY)";
soit transformer :
$sFinMois = date('Y-m-d H:i:s', mktime(23, 59, 59, $_GET['m']+1, 0, $_GET['y']));
Je trouvais la seconde solution plus claire à relire donc voilà. Les deux se valent je pense... après en termes de performances je ne me prononcerait pas, je n'en sais fichtre rien).

pour ma récupération des jours occupés, j'ai fait un truc franchement tiré par les cheveux... (j'ai du mal à faire simple).

// on récupére le début et la fin du mois
$sDebutMois = date('Y-m-d H:i:s', mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']));
$sFinMois = date('Y-m-d H:i:s', mktime(23, 59, 59, $_GET['m']+1, 0, $_GET['y']));
//addtime ajoute un time à un timestamp
$where = "(event_date_debut >= '$sDebutMois' or addtime(event_date_debut, event_duree) >= '$sDebutMois') and event_date_debut <= '$sFinMois'";

$sql ='SELECT
event_date_debut,
event_duree
FROM
evenements
WHERE
'.$where;
//connexion
bdconnect();
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//déclaration de l'array
$jours_busy = array();
while ($event = mysql_fetch_array($req))
{
$jourbusy[] = array(
'event_date_debut' => $event['event_date_debut'],
'event_duree' => $event['event_duree']);

//jr début evt : si jr dbt evt est avt jour début mois, alors == jr début mois
$jrDbtEvt =intval(
(strtotime($event['event_date_debut']) < mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']))
? date('d', mktime(0, 0, 0, $_GET['m'], 1, $_GET['y']))
: date('d',strtotime($event['event_date_debut']))
);
//jr fin mois
$jrFinMois = intval(date('d', mktime(00, 00, 00, $_GET['m']+1, 0, $_GET['y'])));
//timstp fin evt
$timstp_fin_evt = strtotime($event['event_date_debut'])+transfo_duree_en_secondes($event['event_duree']);
//timestamp fin mois
$timstp_fin_mois = mktime(00, 00, 00, $_GET['m']+1, 0, $_GET['y']);

//jr fin evt : si jr fin evt est après jour fin mois, alors == jr fin mois
$jrFinEvt =intval(
($timstp_fin_evt > $timstp_fin_mois)
? date('d',$timstp_fin_mois)
: date('d',$timstp_fin_evt)
);
//pr jr = jour dbt evt ; jr<fin_mois ; jr dbt +1
while(($jrDbtEvt <= $jrFinMois) AND ($jrDbtEvt <= $jrFinEvt))
{
//$jours_busy[]= $jrDbtEvt;
if(!in_array($jrDbtEvt,$jours_busy))
{
$jours_busy[]= $jrDbtEvt;
}
$jrDbtEvt++;
}
}
mysql_free_result ($req);

je pense que je vais finalement créer dans ma table une colonne de fin d'evenement directement, renseignée au moment de l'enregistrement, celà simplifiera mes requêtes.

Sujet résolu ! Merci Encore !


Cette discussion est classée dans : date, mois, event, evt, dbt


Répondre à ce message

Sujets en rapport avec ce message

deffirence entre deux date (ans, mois, semaines, jour) [ par apz ] salut,dans une zone membre je veux affiche des dates recuperer depuis un champs DATETIME d'un enregistrement.dans ce champ je sauvegarde la derniere d Afficher une date [ par iomega ] Bonjour à tous je voudrai savoir comment faire pour afficher dans une variable le mois suivant du mois courant c'est-à-dire actuellement on est le moi Date du lendemain en PHP [ par kimengumi ] Salut à tous,Je viens d'être confronté à un chtit problème, c'est d'afficher la date du lendemain en PHPVous allez me dire qu'il suffit de faire un da Date d'il y a un mois [ par kimengumi ] Salut tout le monde !J'ai un problème qui me retourne la tête, j'essaye de trouver la date d'il y a un mois par rapport à une date donnée.C'est à dire Pb avec Date() & mktime() [ par LordDaedalus ] BonjourJe suis en train de créer un agenda en utilisant les fonctions date() et mktime().j'utilise $Jour = Date("d",mktime(Date("h")-24*10*7)Le jour e rajout un mois a une date [ par toxyko_974 ] Salut,je voudrais savoir comment faire pour rajouter 30 jours à une date (exemple : obtenu a l'aide de la fonction date(); en php) ? et bien sur en te Gestion de dates [ par tryoruda ] SalutJe souhaite quelques tuyaux pour gérer les dates :- un formulaire avec choix du jour / du mois / de l'année envoie vers un seul champ Mysql date- HELP !!!!! pb de variable je pensse [ par mickey180 ] Boujors à tous.Je suis nouveau dans le monde du PHP et j'ai un petit pb avec une de mes page.EXPLICATION : Cette page fait partie d'un intranet et doi affichage d'une date JJ/MM/AAAA dans une recherche [ par vir76 ] Salut tout le monde,J'ai fait la fonction suivante :function datemysql($date){$annee=substr($date,7,4);$mois=substr($date,4,2);$jour=substr($date,0,2) somme dans un tableau [ par matos_deluxe ] Chalut, voila le probleme; j'ai une table "conso", un champ "date_conso_mois" et des champs de consommable ( CD/DVD etc) ; à chaque fois que je consom


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales