planning hebdomadaire
le 14/07/2008 à 11:07
krma
Bonjour tout le monde et happy 14 juillet (pour ceux qui n'aiment pas G.Brassens)
je reviens avec une question concernant une requete SQL que je souhaiterai la plus simple et optimisée possible pour alimenter un tableau de planning hebdo :
lundi, mardi, mercredi... dimanche
et en ordonnées, les heures de chaque jour (8h > 23h).
Je pensais faire une requete par heure et filtrer les événements par $jour pour les afficher dans la bonne case du planning mais je suis sur qu'il y a mieux à faire.
Je n'ai pas encore commencé à coder mais vous pouvez voir le layout du planning hebdo
ici.
Merci pour vos suggestions
L'homme-singe est celui qui connait ses limites
le 15/07/2008 à 01:50
krma
C'est remoi, j'ai un peu avancé sur mon probleme, je vous soummets la page. Si vous pouvez m'éclairer sur la requete SQL, ce serai cool parce que pour l'heure, ça m'affiche le cours tous les jours de la semaine. Et j'aimerai qu'il ne s'affiche QUE dans la colonne du jour concerné :p)
<?php
include_once ('_connexion.php');
$table='2008_planning_cours'; // nom de la table contenant les activités
echo '<tr><td> </td><td>lundi</td><td>mardi</td><td>mercredi</td><td>jeudi</td><td>vendredi</td><td>samedi</td><td>dimanche</td>';
echo '</tr>';
mysql_connect("$host", "$user", "$password");
mysql_select_db("$base");
$res1 = mysql_query("select * from $table ORDER BY heure ASC");
while ($requet1 = mysql_fetch_object($res1)) {
echo '<tr><td>'.$requet1->heure.'h00</td>'; //affichage de l'heure du cours dans la deuxieme colonne
$query2="SELECT heure,jour,style,date_debut,date_fin FROM $table WHERE jour='$requet1->jour GROUP BY heure,jour,style,' AND heure='$requet1->heure'";
$res2=mysql_query($query2);
while ($requet2=mysql_fetch_object($res2));
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
echo '<td>-', $requet1->style, '</td>';
}
echo '</tr>'; //fin de la ligne
?>
Merci si vous pouvez y jeter un oeil et éclairer ma lanterne.
L'homme-singe est celui qui connait ses limites
le 15/07/2008 à 02:08
krma
En gros, il me manque la fonction colonne quoi, mais jisépa koa mettre dedans
...
<?php
function colonne($heure, $jour, $joura) {
return( $joura );
}
$query2="SELECT heure,jour,style,date_debut,date_fin FROM $table WHERE jour='$requet1->jour GROUP BY heure,jour,style,' AND heure='$requet1->heure'";
$res2=mysql_query($query2);
while ($requet2=mysql_fetch_object($res2));
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
echo colonne($requet1->heure, $requet1->jour, $joura)? '<td>'.$style.'</td>' : '<td></td>';
}
L'homme-singe est celui qui connait ses limites
le 15/07/2008 à 18:23
krma
Ca n'inspire pas grand monde mon truc...
L'homme-singe est celui qui connait ses limites
Il vaut mieux toujours faire une requête un peu plus grosse, quitte à faire du traitement derrière en PHP plutôt que de placer une requête SQL dans une boucle PHP (je dis ca car j'ai comme une intuition qui me dit que tu vas utiliser ta fonction colonne dans une boucle).
le 15/07/2008 à 23:31
krma
Yep, merci. C'est vrai que c'est chaud et surtout pas top maitrisable. Au bout d'un moment, on ne sait plus quoi renvoit quoi !
Bon, c'est le coup de la case du tableau qui me chagrine. Comment je vais pouvoir afficher mon cours de Salsa le mercredi à 14h... Un id sur chaque cellule ou ça craint du boudin ?
L'homme-singe est celui qui connait ses limites
le 16/07/2008 à 17:23
krma
C'est juste horrible de faire un planning hebdo...
L'homme-singe est celui qui connait ses limites
le 16/07/2008 à 18:13
krma
Bonsoir, juste un truc sur cette requete siouplé, je ne comprends pas pourquoi ça ne m'affiche pas le cas n°1 meme quand le requete est vide. Ca fait 2 h que je suis dessus et je ne vois pas ou est le probleme. Merci :-)
<?php
mysql_connect($host,$user,$password);
mysql_select_db("$base") or die(mysql_error());
$sql1 = 'SELECT * FROM '.$table.' where status = 1 LIMIT 0,500;';
$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
while($data1 = mysql_fetch_array($req1)) {
if ($data1 == 0) {
echo "cas n° 1 : aucun enregistrement";
} else {
echo "cas n° 2 : <b>Plusieurs enregistrements</b>";
}
}
mysql_free_result($req1);
?>
L'homme-singe est celui qui connait ses limites
le 17/07/2008 à 17:45
Keika
parceque $data est un tableau...?
Bon alors, voila comment je negocierai ton probleme, comme personne ne veut s'y coller. Et oui pour Lupusmic, je suis un sauvage !
Donc, je ferais l'affichage par colonne deja. Lundi, mardi, mercredi, blabla.
il te faudrait faire des boucles dans un boucle.
Tu stockes en BDD, ton jour (0 a 6 ou lun,mar, comme tu veux) et une fois tout ca recupere tu geres ligne par ligne, puis cellule par cellue
Le PHP --> C'est dur !
(Keika) C'est parce qu'on fait des boucles qu'on est un sauvage. Ça dépend où on les fait. Comme les galipettes 8)
Et puis je pouvais pas m'y coller, j'avais piscine.
(krma) Essaye de ne pas tout faire en même temps. Je te conseillerais de créer des classes qui s'occupent de gérer l'aspect agenda. Tu ne t'occupe pas de la base de données, on s'en fout pour l'instant.
Tu testes en y injectant des données manuellement (c'est à dire sans interroger la base de données), et tu affiches aussi manuellement les données. Le mieux, c'est de créer un script PHP à exécuter en ligne de commande. C'est plus simple, puisque tu mets sommairement en page.
Après ça tu peux t'attaquer à la récupération des données dans la base de données. Tu écris une classe de contrôle, qui va te permettre de requêter la base, et d'utiliser les résultats pour nourrir tes objets métier.
Une fois que ça marche, il te suffit d'écrire les classes qui te permettent d'afficher les objets métiers, et d'adapter le contrôleur pour qu'il fournisse à la vue les objets métiers qu'elle doit afficher.
Si vraiment tu n'arrive pas encore à penser objet, ce n'est pas grave. Tu peux faire quelque chose d'équivalent en procédural.
L'important c'est de bien tout séparer, et de gérer les erreurs possibles. Ça signifie qu'il faut que tu relises la documentation des fonctions que tu utilises, et que tu vérifie les erreurs qu'il faut gérer.
Sinon, tu pourras poster autant que tu voudras, on ne pourra pas t'aider sans messages d'erreur.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.