Question concernant un "while"

Eléphant du PHP | 169 Messages

19 mars 2007, 17:35

Slt, tous le monde !

je suis entraint de mettre en place un tableau qui vas lister tout les évènements qui sont lié à un mois de l'année.
Concernant la conception, le mois de l'année est en "html" et l'affichage des évènements en php.

Code : Tout sélectionner

<table width="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#FFFFFF"> <tr> <td id="cellule_tableau">JANVIER</td> <td id="cellule_tableau">FEVRIER</td> <td id="cellule_tableau">MARS</td> <td id="cellule_tableau">AVRIL</td> <td id="cellule_tableau">MAI</td> <td id="cellule_tableau">JUIN</td> <td id="cellule_tableau">JUILLET</td> <td id="cellule_tableau">AOUT</td> <td id="cellule_tableau">SEPTEMBRE</td> <td id="cellule_tableau">OCTOBRE</td> <td id="cellule_tableau">NOVEMBRE</td> <td id="cellule_tableau">DECEMBRE</td> </tr> <tr> <td valign="top" bgcolor="#EEF4EB"> <div align="center"> <font face="Arial" size='-1' color="#000099"> </font> <? while ($janvier = mysql_fetch_array($janvier_retour) ) { echo '<a href="detail_congres.php?info='.$janvier["id_agenda"].'">'.$janvier["congres_agenda"].'</a>'; echo "<br />"; echo "<hr noshade=\"noshade\"/>"; } ?> </div> </div></td> /* MEME CHOSE POUR LES AUTRES MOIS DE L'ANNEE */
la table évènement contient un champ Date.

je voudrais réalisé une boucle, qui me duplique le tableau que je viens de créer a chaque fois que l'année est différente.

exemple, si j'ai 2 évènements : 1 dans l'année 2007 et un autre dans l'année 2008, j'ai alors 2 tableaux affiché....
Si je n'ai que des événements qui se déroulent dans l'année 2007, je n'aurais alors qu'un tableau

J'ai commencé a écrire cette requête Mysql, mais je suis resté bloqué au milieu car en faite, je ne sais pas quoi demandé pour faire la différence selon les année
$tableau_annee = "SELECT date_debut_evenement FROM agenda  WHERE date_debut_evenement = '?????' ";

$tableau_annee_retour =  mysql_query ($tableau_annee);
Je vous demande donc votre aide ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 mars 2007, 23:32

Est-ce que tu as un champ dans ta table qui permet de savoir à quelle année est liée l'évènement ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 169 Messages

20 mars 2007, 10:32

Voici les champs que j'ai dans la table, je pensez que les champs date_debut_evenement ou date_fin_evenement, pouvez me servire de repére ?

Code : Tout sélectionner

id_evenement` tinyint(4) NOT NULL auto_increment, `congres_evenement` text NOT NULL, `mois_evenement` text NOT NULL, `date_debut_evenement` date NOT NULL default '0000-00-00', `date_fin_evenement` date NOT NULL default '0000-00-00', `ville_evenement` text NOT NULL, `pays_aevenement` text NOT NULL,
Dans ma requete SQl, faut il que j'utilise mysql_fetch_row ou bien mysql_fetch_array ?

Merci pour ton aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 mars 2007, 10:37

Dans une instruction SQL,

Code : Tout sélectionner

YEAR(date_debut_evenement)
retourne l'année de la date passé en paramètre.

à utiliser dans un WHERE ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 169 Messages

20 mars 2007, 10:51

Voila ce que j'ai commencé à écrire, (je ne suis pas sure que ce soit correcte) par contre je ne sais pas quoi mettre dans le WHERE :?:

$querySelect="select YEAR(date_debut_evenement) from `agenda` where date_debut_evenement = YEAR(date_debut_evenement) desc";
					 $resultSelect=mysql_query($querySelect);
--
Kweb

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 mars 2007, 11:05

Il suffit de tester ta requête dans MySQL ou phpMyAdmin pour savoir si elle est correcte ou pas :) En dehors du problème de syntaxe au niveau de desc (manque un order by quelquechose), m'est avis qu'elle ne retournera pas beaucoup de résultats :

Code : Tout sélectionner

SELECT YEAR(date_debut_evenement) // retourne toutes les "années" du champ date_debut_evenement FROM agenda // dans la table agenda WHERE date_debut_evenement = YEAR(date_debut_evenement) // pour lesquels la valeur du champ date est égal à l'année du champ date
Ce qui est bien en sql, c'est que ca s'écrit comme ça se parle. Essaye de mettre à plat ce que tu veux faire exactement (je veux les champs machins, de la table truc, où ...) et tu verras que le sql viendra tout seul :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 169 Messages

20 mars 2007, 12:42

Ok, j'ai bien compris le raisonnement à avoir lorsque on écrit une requête SQL.

Le problème est que j'ai du mal a mettre a plat ce que je souhaite faire :?
Je pense que je mélange un peu le raisonnement des requête SQL et des boucle (while). :?

Pour bien comprendre ce que je veux faire voici une image.
je voudrais que le tableau que l'on vois ci dessous, se duplique a chaque fois qu'il y a une année différente. tous les évènements qui sont dans le tableau corresponde a la même année.
toutes les boucles (while) qu'il y a dans le tableau fonctionne tres bien (au moins une chose que j'ai réussi :roll: )
Image

Moi j'aurais vus la chose comme sa, mais je sais tres bien que ce n'est pas correcte...
 <? $querySelect="  SELECT date_debut_evenement
				FROM agenda
				WHERE YEAR(date_debut_evenement)='2007'
				ORDER BY YEAR(date_debut_evenement)
				";

$resultSelect=mysql_query($querySelect); ?>

<? while ($test = mysql_fetch_array($resultSelect) )
				{ ?>
			//MON TABLEAU QUE L'ON VOIS SI DESSUS
				<? } ?>
--
Kweb

VaN
Mammouth du PHP | 1107 Messages

20 mars 2007, 17:50

essaye quelque chose du genre :
$querySelect= "SELECT DISTINCT YEAR(date_debut_evenement) AS annee
                FROM agenda
                WHERE YEAR(date_debut_evenement)='2007'
                ORDER BY YEAR(date_debut_evenement)
                "; 
DISTINCT sert à ne récupérer qu'une seule fois la même occurence : c'est a dire que si dans ta table tu as plusieurs éléments dont l'année est 2007, il ne te prendra que une seule fois 2007, pour éviter de répéter la boucle autant de fois que de 2007 trouvés.