Vous n'êtes pas identifié(e).
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
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.
Hors ligne
Saluton,
Une requête pour récupérer toutes les dates occupées.
Par qui ?
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
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
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.
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
Merci pour votre aide à tous les 2.
Ca me donne un truc comme ca qui m'a l'air de fonctionner :
$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
Savez vous comment je pourrais organiser l'affichage par membres les plus disponible vers les moins disponible?
Hors ligne