PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 04-12-2010 17:51:24

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

afficher un calendrier multi-utilisateur

Bonjour,
J'en reviens à mon souci de planning pour la réserve GD

J'ai une table dispo avec cette structure :
id_membre (int)
date_d (date)

Les membres rentrent chaque jour de disponibilité.

J'aimerais afficher dans la partie administration un calendrier en tableau multi-utilisateurs de cette forme :

Octobre   1 2 3 4 5 6 7 8 9 10 ...
Membre1 1 0 0 0 0 0 1 1 0 1
Membre2 0 0 0 0 0 0 1 1 0 0

Les 1 représente une disponibilité à la journée et les 0 non.

je ne sais pas comment faire les requêtes pour réaliser ce tableau.
j'avais pensé faire une requête sur la table membre avec pour chaque membre une requête sur la table dispo sur chaque jour du mois.

Mais cela au final va engendrer avec les boucles environ 7500 ou 15000 requêtes à chaque affichage de la page. 250 membres et affichage sur 1 ou 2 mois.

Auriez vous une idée?

Je vous remercie beaucoup

Hors ligne

#2 04-12-2010 18:18:45

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : afficher un calendrier multi-utilisateur

Une requête pour récupérer toutes les dates occupées.

Une boucle allant du premier jour au dernier et vérifiant qu'on a pas récupéré avec la requête un créneau occupé. Sinon afficher libre.

Un bel algo tout ce qu'il y a de plus simple en gros. smile

Hors ligne

#3 04-12-2010 18:52:11

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : afficher un calendrier multi-utilisateur

Saluton,

xTG a écrit :

Une requête pour récupérer toutes les dates occupées.

Par qui ?

xTG a écrit :

Une boucle allant du premier jour au dernier et vérifiant qu'on a pas récupéré avec la requête un créneau occupé. Sinon afficher libre.

En bref je ne peux me prononcer, ne comprenant pas clairement quel est le besoin ni ce que recouvre la notion de disponibilité, s'agit-il de celle du membre ou de la journée ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 05-12-2010 00:02:46

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : afficher un calendrier multi-utilisateur

Il s'agit de celle du membre.
Il donne ses disponibilités, en jours.
Et la page que je souhaite faire afficher un calendrier sur 2 mois de tous les membres avec leur dispo.

Hors ligne

#5 05-12-2010 07:40:58

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : afficher un calendrier multi-utilisateur

Alors la solution proposée par l'ami xTG est tout à fait pertinente.
Je te suggère, à mon tour, d'utiliser une fonctionnalité propre à MySQL.

SELECT id_membre,
      GROUP_CONCAT(
        DATE_FORMAT(d_date,GET_FORMAT(DATE,'ISO')) ORDER BY d_date
        ) AS dispos
FROM dispo
WHERE d_date BETWEEN $debut AND $fin
GROUP BY id_membre
ORDER BY id_membre

Attention les bornes de BETWEEN seront incluses dans la sélection.
En parcourant, en PHP, chaque ligne de résultat de cette requête tu peux 'exploder' la colonne dispos pour en obtenir un array().
Ensuite au sein d'une boucle qui parcourt la période il te suffit de tester avec in_array() si le membre est disponible ou non.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 06-12-2010 23:58:10

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : afficher un calendrier multi-utilisateur

Merci pour votre aide à tous les 2.
Ca me donne un truc comme ca qui m'a l'air de fonctionner :


$date_d='2010-12-01';
$date_f='2010-12-15';

$sql = "SELECT id_membre,
GROUP_CONCAT(DATE_FORMAT(date_d,GET_FORMAT(DATE,'ISO')) ORDER BY date_d) AS dispos
FROM dispo
WHERE date_d BETWEEN '$date_d' AND '$date_f'
GROUP BY id_membre
ORDER BY id_membre"
;
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

while ($result = mysql_fetch_array ($req))
{
  $id_membre = $result['id_membre'];
  $str_date = $result['dispos'];
  $tab_d[$id_membre] = explode(",", $str_date);
 
}

function NbJours($debut, $fin) {

  $tDeb = explode("-", $debut);
  $tFin = explode("-", $fin);

  $diff = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]) -
          mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
 
  return(($diff / 86400)+1);

}
$Nombres_jours =  NbJours($date_d, $date_f);

echo '<table border="1">';
echo '<tr>';

for($i=0;$i < $Nombres_jours;$i++)
     {
     
     $tab_date = explode("-", $date_d);
     $date = date('d/m',mktime(0, 0, 0, $tab_date[1], $tab_date[2] + $i, $tab_date[0]));
     
    echo '<td width="50">'.$date.'</td>';
     }
echo '</tr>';


for($j=1;$j < 5;$j++)
  {
    echo '<tr>';
    for($i=0;$i < $Nombres_jours;$i++)
     {
       
       $tab_date = explode("-", $date_d);
       $date = date('Y-m-d',mktime(0, 0, 0, $tab_date[1], $tab_date[2] + $i, $tab_date[0]));
     
      if(in_array($date,$tab_d[$j]))
        {
          echo '<td width="50" bgcolor="#33FF00"> </td>';
        }
       else
       {
          echo '<td width="50" bgcolor="#FF0000"> </td>';
       }

     }
    echo '</tr>';
  }

echo '</table>';
 

Qu'en pensez vous?

Dernière modification par morgan47 (07-12-2010 00:15:33)

Hors ligne

#7 08-12-2010 18:50:20

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : afficher un calendrier multi-utilisateur

Savez vous comment je pourrais organiser l'affichage par membres les plus disponible vers les moins disponible?

Hors ligne

Pied de page des forums