Disponibilités Suivant Les Jours et Les Heures

flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 26 nov. 2017 à 20:19 - Dernière réponse : yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention
- 10 déc. 2017 à 15:40
Bonsoir, je cherche un moyen de mètre les disponibilités suivant les jours et heures que les utilisateurs ont donner.

Pour le moment j'ai un tableau avec :



J'aimerai simplement ajouter les heures de disponibilité par exemple a 18H il y a 20 personnes le Lundi, 3 le Vendredi....

Donc déjà pour afficher juste les pourcentage de personnes suivant les jour cela ma pris plus de 100 lignes donc afficher pour chaque heure suivant chaque jour cela risque d'être compliquer et surtout très répétitif.

Voici mon code actuel :

<?php 
session_start();
include_once "SQL/cobdd.php";
if(isset($_SESSION['statut'])){
    if($_SESSION['statut'] != 3){
        header("Location: index.php");
    }
}
if(isset($_SESSION['id_sondage'])){
    $sql_J_1 = "SELECT * FROM participation_user WHERE id_even = ? AND jour_1 = ?";
    $sql_J_2 = "SELECT * FROM participation_user WHERE id_even = ? AND jour_2 = ?";
    $sql_J_3 = "SELECT * FROM participation_user WHERE id_even = ? AND jour_3 = ?";
    //Lundi Jour 1
    $lundiJ1 = $bdd->prepare($sql_J_1);
    $lundiJ1->execute(array($_SESSION['id_sondage'], "Lundi"));
    $nbr_L1 = $lundiJ1->RowCount();
    //Lundi Jour 2
    $lundiJ2 = $bdd->prepare($sql_J_2);
    $lundiJ2->execute(array($_SESSION['id_sondage'], "Lundi"));
    $nbr_L2 = $lundiJ2->RowCount();
    //Lundi Jour 3
    $lundiJ3 = $bdd->prepare($sql_J_3);
    $lundiJ3->execute(array($_SESSION['id_sondage'], "Lundi"));
    $nbr_L3 = $lundiJ3->RowCount();
    
    //Mardi Jour 1
    $mardiJ1 = $bdd->prepare($sql_J_1);
    $mardiJ1->execute(array($_SESSION['id_sondage'], "Mardi"));
    $nbr_M1 = $mardiJ1->RowCount();
    //Mardi Jour 2
    $mardiJ2 = $bdd->prepare($sql_J_2);
    $mardiJ2->execute(array($_SESSION['id_sondage'], "Mardi"));
    $nbr_M2 = $mardiJ2->RowCount();
    //Mardi Jour 3
    $mardiJ3 = $bdd->prepare($sql_J_3);
    $mardiJ3->execute(array($_SESSION['id_sondage'], "Mardi"));
    $nbr_M3 = $mardiJ3->RowCount();

    //Mercredi Jour 1
    $mercrediJ1 = $bdd->prepare($sql_J_1);
    $mercrediJ1->execute(array($_SESSION['id_sondage'], "Mercredi"));
    $nbr_Mer1 = $mercrediJ1->RowCount();
    //Mercredi Jour 2
    $mercrediJ2 = $bdd->prepare($sql_J_2);
    $mercrediJ2->execute(array($_SESSION['id_sondage'], "Mercredi"));
    $nbr_Mer2 = $mercrediJ2->RowCount();
    //Mercredi Jour 3
    $mercrediJ3 = $bdd->prepare($sql_J_3);
    $mercrediJ3->execute(array($_SESSION['id_sondage'], "Mercredi"));
    $nbr_Mer3 = $mercrediJ3->RowCount();
    
    //Jeudi Jour 1
    $jeudiJ1 = $bdd->prepare($sql_J_1);
    $jeudiJ1->execute(array($_SESSION['id_sondage'], "Jeudi"));
    $nbr_J1 = $jeudiJ1->RowCount();
    //Jeudi Jour 2
    $jeudiJ2 = $bdd->prepare($sql_J_2);
    $jeudiJ2->execute(array($_SESSION['id_sondage'], "Jeudi"));
    $nbr_J2 = $jeudiJ2->RowCount();
    //Jeudi Jour 3
    $jeudiJ3 = $bdd->prepare($sql_J_3);
    $jeudiJ3->execute(array($_SESSION['id_sondage'], "Jeudi"));
    $nbr_J3 = $jeudiJ3->RowCount();
    
    //Vendredi Jour 1
    $vendrediJ1 = $bdd->prepare($sql_J_1);
    $vendrediJ1->execute(array($_SESSION['id_sondage'], "Vendredi"));
    $nbr_V1 = $vendrediJ1->RowCount();
    //Vendredi Jour 2
    $vendrediJ2 = $bdd->prepare($sql_J_2);
    $vendrediJ2->execute(array($_SESSION['id_sondage'], "Vendredi"));
    $nbr_V2 = $vendrediJ2->RowCount();
    //Vendredi Jour 3
    $vendrediJ3 = $bdd->prepare($sql_J_3);
    $vendrediJ3->execute(array($_SESSION['id_sondage'], "Vendredi"));
    $nbr_V3 = $vendrediJ3->RowCount();
    
    //Samedi Jour 1
    $samediJ1 = $bdd->prepare($sql_J_1);
    $samediJ1->execute(array($_SESSION['id_sondage'], "Samedi"));
    $nbr_S1= $samediJ1->RowCount();
    //Samedi Jour 2
    $samediJ2 = $bdd->prepare($sql_J_2);
    $samediJ2->execute(array($_SESSION['id_sondage'], "Samedi"));
    $nbr_S2= $samediJ2->RowCount();
    //Samedi Jour 3
    $samediJ3 = $bdd->prepare($sql_J_3);
    $samediJ3->execute(array($_SESSION['id_sondage'], "Samedi"));
    $nbr_S3= $samediJ3->RowCount();
    
    //Dimanche Jour 1
    $dimancheJ1 = $bdd->prepare($sql_J_1);
    $dimancheJ1->execute(array($_SESSION['id_sondage'], "Dimanche"));
    $nbr_D1 = $dimancheJ1->RowCount();
    //Dimanche Jour 2
    $dimancheJ2 = $bdd->prepare($sql_J_2);
    $dimancheJ2->execute(array($_SESSION['id_sondage'], "Dimanche"));
    $nbr_D2 = $dimancheJ2->RowCount();
    //Dimanche Jour 3
    $dimancheJ3 = $bdd->prepare($sql_J_3);
    $dimancheJ3->execute(array($_SESSION['id_sondage'], "Dimanche"));
    $nbr_D3 = $dimancheJ3->RowCount();
    
    
    $Total_J1 = $nbr_L1 + $nbr_M1 + $nbr_Mer1 + $nbr_J1 + $nbr_V1 + $nbr_S1 + $nbr_D1;
    $Total_J2 = $nbr_L2 + $nbr_M2 + $nbr_Mer2 + $nbr_J2 + $nbr_V2 + $nbr_S2 + $nbr_D2;
    $Total_J3 = $nbr_L3 + $nbr_M3 + $nbr_Mer3 + $nbr_J3 + $nbr_V3 + $nbr_S3 + $nbr_D3;
    $Total_J = $Total_J1 + $Total_J2 + $Total_J3;
    
    $nbr_L = $nbr_L1 + $nbr_L2 + $nbr_L3;
    $nbr_M = $nbr_M1 + $nbr_M2 + $nbr_M3;
    $nbr_Mer = $nbr_Mer1 + $nbr_Mer2 + $nbr_Mer3;
    $nbr_J = $nbr_J1 + $nbr_J2 + $nbr_J3;
    $nbr_V = $nbr_V1 + $nbr_V2 + $nbr_V3;
    $nbr_S = $nbr_S1 + $nbr_S2 + $nbr_S3;
    $nbr_D = $nbr_D1 + $nbr_D2 + $nbr_D3;
    
    $L_p = floor((100*$nbr_L)/$Total_J);
    $M_p = floor((100*$nbr_M)/$Total_J);
    $Mer_p = ceil((100*$nbr_Mer)/$Total_J);
    $J_p = floor((100*$nbr_J)/$Total_J);
    $V_p = ceil((100*$nbr_V)/$Total_J);
    $S_p = floor((100*$nbr_S)/$Total_J);
    $D_p = floor((100*$nbr_D)/$Total_J);
    //fin calcule proucentage par jour
    
    //début en fonction de chaque jour et chaque heur
}



include "lib/top.php";


?>

<table style="margin-top: 15%;">
    <?php if($L_p != 0){ ?>
    <tr>
        <th>Jour :</th>
        <th>Personnes :</th>
    </tr>
    <tr>
        <th>Lundi</th>
        <td>
            <center>
                <?= $L_p." %" ?>
            </center>
        </td>
        <td></td>
    </tr>
    <?php } ?>
    <?php if($M_p != 0){ ?>
    <tr>
        <th>Mardi</th>
        <td>
            <center>
                <?= $M_p." %" ?>
            </center>

        </td>
    </tr>
    <?php } ?>
    <?php if($Mer_p != 0){ ?>
    <tr>
        <th>Mercredi</th>
        <td>
            <center>
                <?= $Mer_p." %" ?>
            </center>
        </td>
    </tr>
    <?php } ?>
    <?php if($J_p != 0){ ?>
    <tr>
        <th>Jeudi</th>
        <td>
            <center>
                <?= $J_p." %" ?>
            </center>
        </td>
    </tr>
    <?php } ?>
    <?php if($V_p != 0){ ?>
    <tr>
        <th>Vendredi</th>
        <td>
            <center>
                <?= $V_p." %" ?>
            </center>
        </td>
    </tr>
    <?php } ?>
    <?php if($S_p != 0){ ?>
    <tr>
        <th>Samedi</th>
        <td>
            <center>
                <?= $S_p." %" ?>
            </center>
        </td>
    </tr>
    <?php } ?>
    <?php if($D_p != 0){ ?>
    <tr>
        <th>Dimanche</th>
        <td>
            <center>
                <?= $D_p." %" ?>
            </center>
        </td>
    </tr>
    <?php } ?>
</table>
<?php
include "lib/bot.php";
?>





Merci d'avance pour votre aide.
Afficher la suite 
586Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention

58 réponses

Répondre au sujet
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - Modifié par yg_be le 26/11/2017 à 21:45
0
Utile
2
bonsoir,
pourrais-tu expliquer ce que contient ta base de données? je vois 4 colonnes, id_even, jour_1, jour_2 et jour_3. que contiennent ces champs?
qu'essaies-tu d'obtenir?
montrer ton code n'est pas une bonne façon de nous faire comprendre ce que tu veux obtenir: ton code est peut-être incorrect, ou difficile à comprendre.
merci de nous expliquer pourquoi tu fais cela.

quand tu écris "j'ai un tableau avec", que veux-tu dire? c'est ce que tu obtiens, tu veux autre chose, c'est ce qu'il y a dans ta base, ?

en passant: il est inutile de faire plusieurs fois des prepare pour la même requête. fais plutôt:
$p_jour1 = $bdd->prepare($sql_J_1);
$p_jour2 = $bdd->prepare($sql_J_2);
$p_jour3 = $bdd->prepare($sql_J_3);

$p_jour1->execute(array($_SESSION['id_sondage'], "Lundi"));
$nbr_L1 = $p_jour1->RowCount();
$p_jour2->execute(array($_SESSION['id_sondage'], "Lundi")); 
$nbr_L2 = $p_jour2->RowCount();
$p_jour3->execute(array($_SESSION['id_sondage'], "Lundi"));
$nbr_L3 = $p_jour2->RowCount();

$p_jour1->execute(array($_SESSION['id_sondage'], "Mardi"));
$nbr_M1 = $p_jour1->RowCount();
$p_jour2->execute(array($_SESSION['id_sondage'], "Mardi")); 
$nbr_M2 = $p_jour2->RowCount();
$p_jour3->execute(array($_SESSION['id_sondage'], "Mardi"));
$nbr_M3 = $p_jour2->RowCount();
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 26 nov. 2017 à 21:35
Donc ma table est composer de cela :


--
-- Structure de la table `participation_user`
--

CREATE TABLE `participation_user` (
`id` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`id_even` int(11) NOT NULL,
`id_jeu` int(11) NOT NULL,
`reponse` varchar(50) NOT NULL,
`jour_1` varchar(100) DEFAULT NULL,
`jour_2` varchar(100) DEFAULT NULL,
`jour_3` varchar(100) DEFAULT NULL,
`heure_debut_1` time DEFAULT NULL,
`heure_fin_1` time DEFAULT NULL,
`heure_debut_2` time DEFAULT NULL,
`heure_fin_2` time DEFAULT NULL,
`heure_debut_3` time DEFAULT NULL,
`heure_fin_3` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Donc le but est d'afficher si cela est disponible, une colonne supplémentaire avec en titre de colonne par exemple 0H est en dessous de nombre de personne disponible a cette heure la, suivant les jours disponible.

Jour_1 Jour_2 Jour_3 il y a des jours de la semaines enregistrer dedans, car au départ j'ai un formulaire qui demande les disponibilité et on peu en entré jusqu'a 3, la réponse est est positif, sinon aucune disponibilité donc les champs son par défaut en NULL.

Et quand je dis j'ai un tableau, c'est que j'optaient et ce qui est afficher.


Voila pour cela je vais modifier mon code afin de le simplifier et économiser des lignes :).

Merci a vous.
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 29 nov. 2017 à 22:27
Bonjour,

Oulalalala..... (c'est ce que je dis quand je vois une table comme celle la. )
Que se passe t-il si demain tu décides d'avoir non pas 3 mais 4 plages ? Et si ensuite tu en veux 7 ????
Tu vas ajouter à la main des colonnes supplémentaires ??? Oo

Tu devrais avoir une table à part qui serait pour stoker les différentes plages de l'utilisateur

plage_user
id INT
jour INT
heure_deb TIME
heure_fin TIME


et ainsi, faire une liaison avec ta précédente table participation_use qui ne contiendrait plus que :
 `id` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`id_even` int(11) NOT NULL,
`id_jeu` int(11) NOT NULL,
`reponse` varchar(50) NOT NULL,



Ta requête pourra ainsi facilement être groupée sur les JOURS et sur les HEURES....

Et comme ça... si demain tu veux finalement autoriser 50 plages... ben tu pourras sans rien avoir à toucher dans ta bdd !

Une BDD ... on en construit le modèle au départ... et on n'y touche plus par la suite. Tout doit pouvoir se faire automatiquement.....
Commenter la réponse de yg_be
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 26 nov. 2017 à 21:47
0
Utile
je te propose de tester ceci:
session_start();
include_once "SQL/cobdd.php";
if(isset($_SESSION['statut'])){
    if($_SESSION['statut'] != 3){
        header("Location: index.php");
    }
}
if(isset($_SESSION['id_sondage'])){
    $sql_J = "SELECT count(*) as cjour, jour FROM 
	( 	SELECT id_even, jour_1 as jour FROM participation_user
		UNION ALL
		SELECT id_even, jour_2 FROM participation_user
		UNION ALL
		SELECT id_even, jour_3 FROM participation_user
	)
	WHERE id_even = ?
	GROUP by jour"

    // participants par jour
    $req_pjour = $bdd->prepare($sql_J);
    $req_pjour->execute(array($_SESSION['id_sondage']));
	$result_pjour=$req_pjour->fetchAll();
	foreach ($result_pjour as $unjour)
	{
		echo $unjour['cjour'] . " personne(s) le " . $unjour['jour'] . "<br>";
	}

   
}


 
Commenter la réponse de yg_be
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 26 nov. 2017 à 21:55
0
Utile
6
tu voudrais un tableau pour un sondage donné, qui donne pour chaque heure de chaque jour, le nombre de personnes disponibles?
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 21:52
Voila donc j'ai essayer ce que vous m'avez mis, et donc je tombe sur ce message d'erreur :

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1248 Every derived table must have its own alias in /Applications/MAMP/htdocs/ProjetWWW/admin_event.php:22 Stack trace: #0 /Applications/MAMP/htdocs/ProjetWWW/admin_event.php(22): PDOStatement->execute(Array) #1 {main} thrown in /Applications/MAMP/htdocs/ProjetWWW/admin_event.php on line 22


Pourtant quand je relis votre code vous crée un alias même si je comprend pas le cjour dans la variable $sql_J.

Voila pour les nouvelles je vais regarder de mon coté pourquoi j'ai ce message d'erreur je trouverai surement :)
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 22:01
peut-être ainsi?
SELECT count(*) as cjour, jour FROM 
	( 	SELECT id_even, jour_1 as jour FROM participation_user
		UNION ALL
		SELECT id_even, jour_2 FROM participation_user
		UNION ALL
		SELECT id_even, jour_3 FROM participation_user
	) as tout
	WHERE id_even = ?
	GROUP by jour
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 22:21
Et j'aimerai savoir sur cette partie la :
SELECT id_even, jour_1 as jour FROM 
Pourquoi avez vous mis un alias et pas aux autre plus bas ?
SELECT id_even, jour_2 FROM participation_user
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 22:24
parce que dans une UNION, c'est le premier select qui détermine les noms des champs retournés.
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 22:25
Je comprend merci pour cette précision.
Commenter la réponse de yg_be
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 28 nov. 2017 à 22:19
0
Utile
9
Super merci ça marche regardez, je trouve le résultat étrange non ?

yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 29 nov. 2017 à 00:34
tu poses la question pour la table periodes? dans cette table, tu ne t'occupes pas des jours, uniquement des heures. cette table sert uniquement à découper les journées en périodes. cela va aider à trouver les personnes disponibles pendant toute la durée de chaque période.
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention > yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 3 déc. 2017 à 20:09
Mais ma plage_user que j'ai crée n'est pas bonne donc ?

Vu que tu me parle de la table période ?

J'aurai besoin de 2 tables pour ajouter mon jour puis ma période ?
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 20:51
attention, nous sommes deux à t'assister.
nous te donnons chacun des conseils indépendants, et divergents.
moi j'étais parti de ce que tu avais fait, et j'essayais de changer le moins possible pour obtenir ce que tu charches.
jordane, lui, te donne des conseils pour améliorer ta base de départ, pour que ta base soit plus solide.
tiens-nous au courant de ce que tu as décidé de changer.
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 29 nov. 2017 à 21:08
Oui je comprend bien cela mais juste avec une table période, comment les lier au jour que mon utilisateur aura entré sans mètre un id qui correspond au jour qu'il a entré ?

Par exemple mon User id = 1, m'indique ces disponibilité :
Samedi de 14h a 22h.
Dimanche de 08h a 11h et Dimanche de 16h a 23h.

Si j'ai une simple table période avec heur de début et heur de fin comment savoir que le 08 a 11h et 16h a 23h correspond au jour Dimanche ? Et que 14h a 22h correspond a Samedi ?

Car aussi j'aimerai savoir ce que un utilisateurs précis a entré comme informations, et sans un id dans cette table période comment lié ces informations a mon User id = 1 ?
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 29 nov. 2017 à 22:18
la table periodes est une table supplémentaire qui sert uniquement pour faire ce que j'ai proposé en #14. l'as-tu testé? elle contient uniquement deux champs, rien de plus.

ta table participation_user continue a contenir toutes les infos que tu as décidé, donc tu ne perds rien à ajouter la table periodes.
Commenter la réponse de flo39400
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - Modifié par flo39400 le 29/11/2017 à 23:25
0
Utile
CREATE TABLE `plage_user` (
  `id` int(11) NOT NULL,
  `jour` int(11) NOT NULL,
  `heure_deb` time NOT NULL,
  `heure_fin` time NOT NULL


Voila qui est fait après je teste votre code :)

Haha vu que j'ai tous modifier dans ma base de données je peu pu me servir de heure_debut_1, ....

Je fait faire la modification demain, je reviendrai :)
Merci bonne soirée.
Commenter la réponse de flo39400
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 20:01
0
Utile
Bonsoir, je viens de faire planté MySQL en voulant ajouter des plages horaires manuellement.... :/

La sélection courante ne contient pas de colonne unique. Les grilles d'édition, les cases à cocher ainsi que les liens Éditer, Copier et Supprimer ne sont pas disponibles.


Comment corriger cela ?

Bon moi je vais redémarrer le serveur peu être que cela peu marcher....
Commenter la réponse de flo39400
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 21:09
0
Utile
3
Re donc j'ai crée un table plage_user, mais il serai peu être plus judicieux de faire comme cela :


a AUTO_INCREMENT
id INT
jour VARCHAR
heure_deb TIME
heure_fin TIME


Donc maintenant je doit modifier la structure du code SQL vu que j'ai pu de jour_1, jour_2, jour_3.....

Je vais déjà modifier ma page qui enregistre ces données vu que j'ai modifier ou le jour et la date doivent s'enregistrer.

Puis je m'attaque au SQL....
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 3 déc. 2017 à 21:37
suggestion:
if(isset($_SESSION['id_sondage'])){
    $sql = "SELECT count(*) as cpers, jour, periode_deb, periode_fin 
	FROM participation_user as u, plage_user as p, periodes as h
   WHERE p.id = u.id_user 
      AND p.heure_deb <= h.periode_deb AND p.heure_fin >= h.periode_fin
      AND u.id_even = ?
 GROUP by jour, periode_deb, periode_fin
 ORDER by jour, periode_deb, periode_fin"

    // participants par jour et par période
    $requete = $bdd->prepare($sql);
    $requete->execute(array($_SESSION['id_sondage']));
 $result=$requete->fetchAll();
 foreach ($result as $uneperiode)
 {
echo $uneperiode['cpers'] . " personne(s) le " . $uneperiode['jour'] . " entre " . $uneperiode['periode_deb'] . " et " . $uneperiode['periode_fin']  . "<br>";
 }
}
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 22:05
Super mais, on dirai que la table périodes, je l'est pas.

Je travail seulement sur la table participation_user et plage_user ( 'id' => qui correspond a l'ID de participation_user comme cela chaque participation relève d'une seule tranche horaire par événement et par utilisateur / jour => ou il y a le jour en toute lettres / 'heure_deb' => qui stocke horaire de début / 'heure_fin' => qui stocke l'horaire de fin ).

Voilà pour ce complément d'information de mon coté de vais tester de faire comme vous voir si j'arrive a quelque chose :)


Un grand merci a vous.
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 22:10
if(isset($_SESSION['id_sondage'])){
    $sql = "SELECT count(*) as cpers, jour, heure_deb, heure_fin 
	FROM participation_user as u, plage_user as p
   WHERE p.id = u.id 
      AND p.heure_deb AND p.heure_fin
      AND u.id_even = ?
 GROUP by jour, heure_deb, heure_fin 
 ORDER by jour, heure_deb, heure_fin";

    // participants par jour et par période
    $requete = $bdd->prepare($sql);
    $requete->execute(array($_SESSION['id_sondage']));
 $result=$requete->fetchAll();
 foreach ($result as $uneperiode)
 {
echo $uneperiode['cpers'] . " personne(s) le " . $uneperiode['jour'] . " entre " . $uneperiode['heure_deb'] . " et " . $uneperiode['heure_fin']  . "<br>";
 }
}


on dirai que ça marche ;)
Commenter la réponse de flo39400
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 3 déc. 2017 à 22:22
0
Utile
1
Mais comment mètre sous forme de tableau pour facilité la lecture style par exemple savoir que a entre 20h et 21h par exemple il y a 40 personnes est c'est le pique le plus haut de la journée. Donc style changer de couleur la case.

Voici le résultat que j'aimerai avoir, car juste des simples ligne avec le nombres de personnes ça parle pas vraiment.

Alors que avec ce type de tableau c'est plus simple.

yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 4 déc. 2017 à 00:00
echo "<table>";
 foreach ($result as $uneperiode)
 {
echo "<tr>"
. "<td>" . $uneperiode['jour'] . "</td>" 
. "<td>" . $uneperiode['heure_deb'] ."</td>"
. "<td>" . $uneperiode['heure_fin']  ."</td>"
. "<td>" . $uneperiode['cpers'] . "</td>"
 . "</tr>";
 }
echo "</table>";
Commenter la réponse de flo39400
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 4 déc. 2017 à 09:47
0
Utile
9
Bonjour, merci pour cette suggestion, donc au résultat j'ai cela :


Sauf que dans ma base de données j'ai Samedi 00:00:00 à 03:00:00 et Samedi 13:00:00 à 20:00:00 donc j'ai un problème niveau SQL déjà.

De plus peu t'on faire une boucle pour avoir le tableau 0h a 23h puis faire une autre boucle pour les données ou je devrai calculer le nombre de personne entre 0h et 1h puis 1h et 2h ect..... jusqu'a 23h a 0h.

Le jour données en sur la gauche du tableau, a coté le nombre de personnes suivant le créneau horaires puis déterminer les deux valeurs maximum par ligne de tableau.

Voila voila, donc je vais essayer de modifier la partie SQL et je vous tiens au courant. Bonne journée a vous et merci encore.
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 5 déc. 2017 à 22:39
je pense avoir déjà écrit cinq fois que la table periodes n'a que deux champs.
relis les #14, 16, 18, 34 et 36. lis-tu ce que j'écris? si tu n'es pas d"accord, dis-le.
si tu fais le second choix propose en #36, la table périodes comprend un total de 24 enregistrements, simplement pour découper une journée en 24 heures.
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention > yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 5 déc. 2017 à 22:46
Bas oui le second choix mais cela n'arrange pas mes affaires vu que j'ai aucune idée de comment remplir tous cela..... Et oui je lis, mais ça m'aide pas vraiment, j'ai compris l'idée mais la mise en oeuvre car dans mon exemple comment faire le tri sur quel $pX sera impacter ? Qui doit valoir 0 et qui doit valoir 1 ?
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 6 déc. 2017 à 00:38
dans ton exemple, je vois 25 champs, alors que j'en propose 2.
je suggère de créer une simple table période avec deux champs (periode_deb et periode_fin) et 24 enregistrements.
tu mettrais uniquement 24 enregistrements dans la table periodes:
0h 1h
1h 2h
2h 3h
...
23h 23h59m59s

rien de plus, rien de moins.

et ensuite tu fais la requête suggérée en #25.
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention > yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 6 déc. 2017 à 00:51
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 12:35
pas du tout, la table periodes que je propose est une table supplémentaire ayant un contenu statique, sans id et sans lien avec les autres tables.
Commenter la réponse de flo39400
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 4 déc. 2017 à 10:03
0
Utile
1
Bonjour,

Avant toutes choses .... il serait bien de définir clairement la structure de ta bdd .
Pour cela, nous fournir le MCD et/ou un DUMP de ta bdd serait un minimum.

Ensuite, ça ne sert à rien de faire des tests dans le code PHP tant que tu n'es pas sûr de tes requêtes en SQL !

En plus, je ne sais pas comment tu stockes les infos... mais en ce qui concerne cette ligne
 GROUP by jour, heure_deb, heure_fin 

mais si ton champ heure_deb est format time ( h:i:s) j'aurais plus vu
 GROUP by jour, Hour(heure_deb)






flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 4 déc. 2017 à 12:54
Bonjour, merci de ta réponse: voila DUMP de ma table:

--
-- Base de données : `projetweb`
--

-- --------------------------------------------------------

--
-- Structure de la table `infos_users`
--

CREATE TABLE `infos_users` (
`id` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`nom` varchar(50) DEFAULT NULL,
`prenom` varchar(50) DEFAULT NULL,
`sexe` int(11) DEFAULT NULL,
`date_naissance` text,
`profession` varchar(100) DEFAULT NULL,
`jeux` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `jeux`
--

CREATE TABLE `jeux` (
`id` int(11) NOT NULL,
`nom` varchar(100) NOT NULL,
`lien_image` text NOT NULL,
`type` text NOT NULL,
`info` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `participation_user`
--

CREATE TABLE `participation_user` (
`id` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`id_even` int(11) NOT NULL,
`id_jeu` int(11) NOT NULL,
`reponse` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `plage_user`
--

CREATE TABLE `plage_user` (
`a` int(11) NOT NULL,
`id` int(11) NOT NULL,
`jour` varchar(11) NOT NULL,
`heure_deb` time NOT NULL,
`heure_fin` time NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `sondage`
--

CREATE TABLE `sondage` (
`id` int(11) NOT NULL,
`id_jeu_1` int(11) NOT NULL,
`id_jeu_2` int(11) NOT NULL,
`jour_J` datetime NOT NULL,
`details` text NOT NULL,
`temps_sondage` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `users`
--

CREATE TABLE `users` (
`id` int(11) NOT NULL,
`pseudo` text NOT NULL,
`id_discord` text NOT NULL,
`mdp` text NOT NULL,
`mail` text NOT NULL,
`date_inscription` datetime NOT NULL,
`statut` int(11) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Index pour les tables déchargées
--

--
-- Index pour la table `infos_users`
--
ALTER TABLE `infos_users`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `jeux`
--
ALTER TABLE `jeux`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `participation_user`
--
ALTER TABLE `participation_user`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `plage_user`
--
ALTER TABLE `plage_user`
ADD PRIMARY KEY (`a`);

--
-- Index pour la table `sondage`
--
ALTER TABLE `sondage`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT pour les tables déchargées
--

--
-- AUTO_INCREMENT pour la table `infos_users`
--
ALTER TABLE `infos_users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT pour la table `jeux`
--
ALTER TABLE `jeux`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT pour la table `participation_user`
--
ALTER TABLE `participation_user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
--
-- AUTO_INCREMENT pour la table `plage_user`
--
ALTER TABLE `plage_user`
MODIFY `a` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14;
--
-- AUTO_INCREMENT pour la table `sondage`
--
ALTER TABLE `sondage`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
--
-- AUTO_INCREMENT pour la table `users`
--
ALTER TABLE `users`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;


Donc je doit travailler sur le SQL.
Merci pour vos conseils, il est vrai que crée une table pour stocker les jours et le temps est vraiment plus pratique.
Commenter la réponse de jordane45
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 4 déc. 2017 à 12:55
0
Utile
J'ai fait un aperçu de ce que j'aimerai comme tableau en html :




Voila voila :)
Commenter la réponse de flo39400
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 5 déc. 2017 à 22:46
0
Utile
15
Re bonjour,


Tu ne pars pas sur de bonnes bases.....
Déjà... le MCD de ta bdd devrait ressembler à ça :




De là... il sera facile de faire les requêtes qui te donneront satisfaction...

Par exemple... le nombre de commandes pour le LUNDI aux différentes plages horaires
  • lundi = 1 , mardi = 2 , mercredi = 3 etc...


ça donnerait un truc du genre :
SELECT H.id as ID_PLAGE, 
       concat(H.heure_deb,'-' , H.heure_fin) as PLAGE,
       COUNT(C.id) as NB_COMMANDE 
FROM plages_horaires H
LEFT JOIN commande C ON H.id = C.id_plage
WHERE jour = 1
GROUP BY C.id


Avec ça .. facile de générer ta liste déroulante des plages horaires disponibles....

jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 12:50
Tu as regardé le md que je t'ai donné ??
flo39400 586 Messages postés mardi 8 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 13:13
Euh le MCD avec l'exemple juste en dessous ?
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 15:05
jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 15:08
Je rappel à toutes fins utiles... que la table : plages_horaires est une table de "paramétrage". Elle sert à indiquer à ton programme QUELLE PLAGES HORAIRES peuvent êtres utilisées pour passer commande.
Par exemple... tu veux que les gens puissent commander pour 12h00-12h30 / 12h30-13h00 / 13h00-13h30 et à aucune autres heures.. tu auras dans ce cas ces 3 plages de définis dans la table (et uniquement ceux là).
yg_be 4111 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > jordane45 19201 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 10 décembre 2017 Dernière intervention - 10 déc. 2017 à 15:40
Je n'avais pas lu que flo39400 utilisait des plages horaires prédéterminées et ne se recouvrant pas.
J'avais, au contraire, supposé que chaque utilisateur pouvait définir librement sa plage horaire pour chaque jour, et donc qu'il y aurait des recouvrements entre les plages horaires de chacun. C'est sur base de cette supposition que j'ai proposé, en #14, une table statique "periodes", pour définir les périodes pour lesquelles on voulait calculer le nombre de personnes disponibles.
Commenter la réponse de jordane45