Disponibilités Suivant Les Jours et Les Heures
Résolujordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
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.
- Disponibilités Suivant Les Jours et Les Heures
- Heures creuses - Guide
- Compte instagram suspendu 180 jours - Guide
- Compte facebook suspendu 180 jours - Guide
- Nombre de jours entre deux dates excel - Guide
- Les jours de naissance et leur signification pdf - Télécharger - Histoire & Religion
14 réponses
L'enjeu est de calculer et d'afficher les disponibilités des utilisateurs par jour et par plage horaire sans multiplier les requêtes et en évitant la répétition des calculs. Des solutions ont été proposées, notamment créer une table des plages horaires (24 créneaux) et interroger les données via une jointure entre participation_user, plage_user et periodes pour obtenir un compte par jour et par plage. Concrètement, il est recommandé d’effectuer une jointure entre les tables plage_user, periodes et participation_user et de regrouper par jour et par plage horaire pour compter les inscriptions par créneau. Cela permet d’afficher rapidement les chiffres par jour et par plage sans recalculs lourds, et il existe un exemple de code qui itère sur le jeu de résultats.
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();
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>";
}
}
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 :)
SELECT count(*) as cjour, jour FROM
( SELECT id_even, jour_1 as jour FROM participation_user WHERE jour_1 IS NOT NULL
UNION ALL
SELECT id_even, jour_2 FROM participation_user WHERE jour_2 IS NOT NULL
UNION ALL
SELECT id_even, jour_3 FROM participation_user WHERE jour_3 IS NOT NULL
) as tout
WHERE id_even = ?
GROUP by jour
ORDER by jour
- d'abord tu crées une table, appelée periodes qui a deux champs de type time. les champs sont appelés heure_deb et heure_fin. tu enregistres dans cette table une ligne par période que tu veux voir dans le rapport. par exemple, une ligne avec heure_deb = 9h et heure_fin= 10h
- tu essaies 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 = "SELECT count(*) as cjour, jour, heure_deb, heure_fin FROM
( SELECT id_even, jour_1 as jour, heure_deb, heure_fin FROM participation_user, periodes
WHERE jour_1 IS NOT NULL AND heure_debut_1 <= heure_deb AND heure_fin_1 >= heure_fin
UNION ALL
SELECT id_even, jour_2, heure_deb, heure_fin FROM participation_user, periodes
WHERE jour_2 IS NOT NULL AND heure_debut_2 <= heure_deb AND heure_fin_2 >= heure_fin
UNION ALL
SELECT id_even, jour_3, heure_deb, heure_fin FROM participation_user, periodes
WHERE jour_3 IS NOT NULL AND heure_debut_3 <= heure_deb AND heure_fin_3 >= heure_fin
) as tout
WHERE id_even = ?
GROUP by jour, heure_deb, heure_fin
ORDER by jour, heure_deb, heure_fin"
// participants par jour
$requete = $bdd->prepare($sql);
$requete->execute(array($_SESSION['id_sondage']));
$result=$requete->fetchAll();
foreach ($result as $uneperiode)
{
echo $uneperiode['cjour'] . " personne(s) le " . $uneperiode['jour'] . " entre " . $uneperiode['heure_deb'] . " et " . $uneperiode['heure_fin '] . "<br>";
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionCREATE 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.
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....
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....
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>";
}
}
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.
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 ;)
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.


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.
id => $id_reponse_user;
p1 => 0 // 0 à 1
p2 => 0 // 1 à 2
p3 => 0 // 2 à 3
p4 => 0 // 3 à 4
p5 => 0 // 4 à 5
p6 => 0 // 5 à 6
p7 => 0 // 6 à 7
p8 => 0 //7 à 8
p9 => 1 //8 à 9
p10 => 1 //9 à 10
p11 => 1 //10 à 11
p12 => 1 //11 à 12
p13 => 1 //12 à 13
p14 => 1 //13 à 14
p15 => 0 //14 à 15
p16 => 0 //15 à 16
p17 => 0 //16 à 17
p18 => 0 //17 à 18
p19 => 0 //18 à 19
p20 => 0 //19 à 20
p21 => 0 //20 à 21
p22 => 0 //21 à 22
p23 => 0 //22 à 23
p24=> 0 //23 à 0
C'est ça votre idée ?
Bon après j'ai un traitement php pour pouvoir ajouter cela a ma base de donnée.
Mais la j'ai aucune idée pour pouvoir savoir comment dire a php attention l'heure commence a 8h et fini a 14h donc voila les colonnes qui doivent être remplie.....
si, par exemple, tu veux savoir combien de personnes sont disponibles de 9h à 12h ou de 14h à 16h, tu mettrais deux enregistrements dans la table periodes:
9h 12h 14h 16h
si, par contre, tu veux savoir combien de personnes sont disponibles pendant chacune des 24 heures de la journée, tu mettrais 24 enregistrements dans la table periodes:
0h 1h 1h 2h 2h 3h ... 23h 23h59m59s
cette table ne changerait donc jamais, elle sert uniquement à déterminer les périodes que tu veux voir dans les rapports.
la requête SQL que je t'ai proposée utilisera cette table pour déterminer pour quelles périodes tu veux connaitre le nombre de participants.
$sql = "INSERT INTO periodes(id_plage_user, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24)VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $insert_periode = $bdd->prepare($sql); $insert_periode->executie(array($id, $p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9, $p10, $p11, $p12, $p13, $p14, $p15, $p16, $p17, $p18, $p19, $p20, $p21, $p22, $p23, $p24));
Bon après faut que je trouve un moyen de déterminer les variables suivant ce que l'utilisateur rentre..... Et je sais vraiment pas comment faire. Car je peu déterminé la variable de début donc 8H qui correspond a la variable $p9 ( car de 8H à 9H ) et donc ma variable de fin $p18 ( car de 17H à 18H ). Donc après je dois trouver comment placer les autres variable en dehors du créneau de 08H à 18H et les définir comme égale a 0. Puis mètre chacune des variables du créneau horaire a 1 donc $p9, $p10, $p11, $p12, $p13, $p14, $p15, $p16, $p17, $p18.
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.
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)
--
-- 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.
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....
Pour un USER il peut y avoir 1 ou plusieurs commandes
Que pour chaque commande il faut y avoir 1 ou plusieurs produits
Que pour une commande il y a 1 plage horaire sélectionnée pour un jour donné
Il te faudra remplir (manuellement) la table plages_horaire toi même en définissant les différentes plages souhaitées.
Le reste étant géré via des requête INSERT / UPDATE dans ton programme.
Car j'ai une table plage_horaire comme tu donne dans ton exemple, j'ai la table participation_user qui ressemble ta table commande.
Sais vrai je stocke des jours dans mon champs jour, vous d'après ce que je vois ce son des chiffres de 1 à 7 donc.
J'arrive pas a comprendre pourquoi je n'arrive pas a obtenir mon résultat, bon si je pourrai faire 24 requêtes SQL pour obtenir les 24 résultats de chaque jours.
Vous me dirai cela n'est pas très optimiser,....
Je vous tient au courant.
Dans phpmyadmin ça fonctionne bien :
UPDATE `date` SET `0` = 1 WHERE `id` = 1
En php :
for ($i = $heurD_1; $i <= $heurF_1; $i++){
$sql = "UPDATE date SET $i = :H WHERE id = :id_t";
$up_1 = $bdd->prepare($sql);
$up_1->execute(array('H' => '1',
'id_t' => $id_1));
}
Donc j'ai un message d'erreur :
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5 = '1' WHERE id = '3'' at line 1 in /Applications/MAMP/htdocs/exemple/index.php:48 Stack trace: #0 /Applications/MAMP/htdocs/exemple/index.php(48): PDOStatement->execute(Array) #1 {main} thrown in /Applications/MAMP/htdocs/exemple/index.php on line 48
Qu'on t'explique comment faire... comment structurer tes tables....
et malgré ça... on en revient toujours au point de départ.
Tu n'écoutes aucun de nos conseils.
ça devient lassant.
.. je n'ai pas pour habitude de travailler sur un projet qui est mal structuré et que l'auteur refuse de faire évoluer dans le bon sens.
Tu veux continuer avec tes idées saugrenues et à travailler en mode brouillon sans reflechir... c'est toi qui voit. ...Perso... je laisse tomber.
Bon courage pour la suite.
le site porte bien sont nom sauf que ça marche pas.
ça marche très bien.... à condition de prendre note des remarques/conseils/consignes qu'on te donne.
Si tu es réfractaire à tout changement.... là ... en effet...ça marchera moins bien.
mais bon je fini tous ça
Courage.. tu n'es plus à 3 mois près visiblement....
A force de bidouiller ton code dans tous les sens.. tu finiras bien à le faire fonctionner.... en espérant pour toi que tu n’aies pas, par la suite, besoin de le faire évoluer.
A ce moment là... tu prendras peut-être le temps de reprendre les différentes réponses qui t'ont été données...
Bonne soirée.
Alors après afin d'avancer oui j'ai changer le problème afin de simplifier mon problème, mais j'ai quand même un message d'erreur.
Donc mais vous avez raison on ne peu contredire un grand maître, mais merci de m'avoir aider.
Je vais tous reprendre a zéro.
Bonne soirée a vous.
Je vais tous reprendre a zéro.
Voila.. ça c'est la bonne attitude.
Donc... maintenant que nous sommes d'accord sur ce que tu dois faire... commence par poser, sur papier, le cahier des charges...(voir même le découpage fonctionnel) de ton programme... ainsi que le MCD de ta bdd qui en découle.
A partir de là seulement tu pourras songer à coder.


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.
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
et ainsi, faire une liaison avec ta précédente table participation_use qui ne contiendrait plus que :
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.....