Page 1 sur 1

Question concernant un "while"

Posté : 19 mars 2007, 17:35
par kweb
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 ?

Posté : 19 mars 2007, 23:32
par zeus
Est-ce que tu as un champ dans ta table qui permet de savoir à quelle année est liée l'évènement ?

Posté : 20 mars 2007, 10:32
par kweb
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

Posté : 20 mars 2007, 10:37
par zeus
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 ;)

Posté : 20 mars 2007, 10:51
par kweb
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);

Posté : 20 mars 2007, 11:05
par Ryle
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 :)

Posté : 20 mars 2007, 12:42
par kweb
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
				<? } ?>

Posté : 20 mars 2007, 17:50
par VaN
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.