Plusieurs requêtes sql à insérer ds 1 tableau

Costy -  
 Arka -
Bonjour,

Je n'arrive pas à afficher plusieurs requêtes sql dans un seul et même tableaux (1 requête différente par ligne). A part les 2 premières lignes du tableaux (année et nombre) qui fonctionnent, le reste non (quotient,mois record, valeur mois, jour record, valeur jour)... Les valeurs sont reconnues puisqu'elles s'affichent très bien en dehors (au-dessus en ligne) du tableau.

Voici mon code :

$departement= $_POST['dept'];
$an= 1989;
$aujourd="select max(year(date_jour)) from donnees";
$result=mysql_query($aujourd); //permet d'exécuter la requête

$total=mysql_result($result,0);
echo $total;

$connect=mysql_select_db(stats_foudre,$db) or die("Impossible de selectionner la base :". mysql_error()) ;//Sélectionne la base de données par défaut.
//Tu écris ta requête :
while ($an<=$total) {
echo $an;
$FlashsFrance="select sum(dvd) from donnees where year(date_jour)=$an";
$l=mysql_query($dvdFrance);
$l1=mysql_result($l,0);
echo $l1;
$MoisRecord="select monthname(date_jour) MOISRECORD from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name='$departement') group by month(date_jour) order by sum(dvd) DESC limit 1";
$m=mysql_query($MoisRecord);
$m1=mysql_result($m,0);
echo $m1;
$ValeurMois="select sum(dvd) VALEURMOIS from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name='$departement') group by month(date_jour) order by sum(dvd) DESC limit 1";
$p=mysql_query($ValeurMois);
$p1=mysql_result($p,0);
echo $p1;
//echo $ValeurMois;
$JourRecord="select date_jour JOURRECORD from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name='$departement') order by dvd DESC limit 1";
//echo $JourRecord;
$ValeurJour="select dvd VALEURJOUR from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name='$departement') order by dvd DESC limit 1";
//echo $ValeurJour;

$sql="SELECT codedep,year(date_jour) ANNEE,sum(dvd) NOMBRE,((sum(dvd)/$l1)*100) QUOTIENT from donnees where donnees.codedep=(select code from departement where name='$departement') group by year(date_jour)";
$o=mysql_query($sql);
$o1=mysql_result($o,0);
echo $o1;
//echo $QUOTIENT;
$retour = mysql_query($sql)or die ('Erreur :'.mysql_error()); //Permet d'exécuter une requête SQL sur une ou plusieurs tables d'une base de données. Si la requête exécute une instruction: INSERT, DELETE ou UPDATE, une valeur booléenne sera retournée (0 ou 1). Dans le cas d'une requête de type SELECT, vous obtiendrez un identifiant de résultat.
if (!$retour) {
echo "Impossible d'exécuter la requête ($sql) dans la base : " . mysql_error();
exit;
}
if (mysql_num_rows($retour) == 0) { //Retourne le nombre de rangées dans un résultat. Anciennement mysql_numrows()
echo "Aucune ligne trouvée, rien à afficher.";
exit;
}
$an++;
};

$x=array();
$y=array();
$w=array();
$v=array();
$u=array();
$t=array();
$s=array();

echo "<STYLE TYPE='text/css'><!--
tr.encadre td { border-color:#FFFAFA;border-style:solid;}
--></STYLE> " ;
echo "Nombre de dvd";
echo "<br><br>";
$NbrCol=100;
$NbrLigne=0;
if ($retour != 0) {
$j = 1;
echo '<table border="4">';
while ($donnees = mysql_fetch_array($retour)) {
if ($j%$NbrCol == 1) {
$NbrLigne++;
echo "<tr class=encadre>";
echo "<td><font COLOR='Orange'><b>";
echo 'ANNEE';
echo "</font><br>";
echo 'NOMBRE';
echo "<br>";
echo 'QUOTIENT';
echo "<br><font COLOR='Orange'>";
echo 'MOISRECORD';
echo "</font><br>";
echo 'VALEURMOIS';
echo "<br><font COLOR='Orange'>";
echo 'JOURRECORD';
echo "</font><br>";
echo 'VALEURJOUR';
echo "</b></td>";
$fintr = 0;
}
echo '<td>';
// -------------------------
// DONNEES A AFFICHER dans la cellule
echo '<b>';
echo '<div align="middle"><font COLOR="Orange">';
echo $y[]=$donnees['ANNEE'];
echo '</font><br>';
echo $x[]=$donnees['NOMBRE'];
echo '<br>';
echo $w[]=$donnees['QUOTIENT'];
echo '<br><font COLOR="Orange">';
echo $v[]=$donnees['MOISRECORD'];
echo '</font><br>';
echo $u[]=$donnees['VALEURMOIS'];
echo '<br><font COLOR="Orange">';
echo $t[]=$donnees['JOURRECORD'];
echo '</font><br><br>';
echo $s[]=$donnees['VALEURJOUR'];
echo '</div></b>';
// -------------------------
echo '</td>';
if ($j%$NbrCol == 0) {
echo "</tr>";
$fintr = 1;
}
$j++;
}
// dernière balise /tr
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';

Est-ce que quelqu'un aurait des conseils à m'apporter ? svp

Merci par avance ;)
A voir également:

10 réponses

Arka
 
Pour ça il faut utiliser tout ce que la balise <TABLE> propose:

TR te créé une ligne
TD te créé une cellule dans cette ligne (tu peux remplacer TD par TH pour créer un titre en gras.

La méthode que je t'ai donné donne un tableau vertical, avec titres en haut et une seule boucle pour chercher les résultats, un truc comme ça donc:

**ta requete sql**  
$sql="SELECT * FROM tatable";  
$req=mysql_query($sql) or die ("erreur sql: ".mysql_error());  

**le tableau de resultats**  
echo '<TABLE>';  
echo '<TR><TH>Année : </TH><TH>Nombre : </TH><TH>Quotient : </TH>';  
while ($row=mysql_fetch_array($req){  
         echo '<TR><TD>'.$row[année].'</TD><TD>'.$row[nombre].'</TD><TD>'.$row[quotient].'</TD></TR>';  
}  
echo '</TABLE>';
ce qui donne:  

Année:     Nombre:     Quotient:  
1998          1234           4  
1999          1234           4  
...  
..  
. 


Pour un tableau horizontal, ça demande une boucle while par ligne:

echo '<TABLE>';  
echo '<TR><TH>Année</TH>';   
                  while ($row=mysql_fetch_array($req){  
                       echo '<TD>'.$row[année].'<TD>';}  
echo '</TR>';  
echo '<TR><TH>Nombre : </TH>';  
                 while ($row=mysql_fetch_array($req){  
                       echo '<TD>'.$row[nombre].'<TD>';}  
echo '</TR>';  
echo '<TR><TH>Quotient : </TH>';  
                 while ($row=mysql_fetch_array($req){  
                       echo '<TD>'.$row[quotient].'<TD>';}  
echo '</TR>';  
echo '</TABLE>'; 


Je te conseille vivement de regarder ça: https://www.commentcamarche.net/contents/504-tableau-html-table tu en aura besoin pour fixer des tailles à tes cellules (la taille d'une colonne d'un tableau prends par defaut la taille de la plus grande cellule) ou colorier tes cellules. Essai avec les deux formes de tableau sur une meme page, tu verra lequel est le plus clair à lire.
1
Costy
 
Help ! :(

Vraiment personne ne sait ?
0
Andréa
 
Personne pour m'aider ?? svp c'est assez urgent :s
0
Arka
 
Pour afficher les resultats d'une requete dans un tableau il faut que le while se fasse dans le tableau et pas avant (ou après). Tu code les titres de tes colonnes en premier puis tu respecte l'ordre d'affichage de ces colonnes dans le while pour que les données ailles bien en face.
Ca doit donner un truc du genre:

<TABLE><TR><TD>MOIS</TD></TR><TR><TD>ANNEE</TD></TR>
while ($row=mysql_fetch_array($requete1)){
<TR><TD>$row[mois]</TD></TR>
<TR><TD>$row[année]</TD></TR>
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Costy
 
Merci beaucoup pour ta réponse :) Je teste ça et je te tiens au courant ;)
0
Costy
 
J'ai essayé avec ta méthode mais le problème c'est que tout s'affiche en une seule colonne comme ceci :

année
nombre
quotient
moisrecord
valeurmois
jourrecord
valeurjour
1990
10645
6.54
février
... et ainsi de suite :s

Pour le nom des lignes ça me va mais les valeurs je les voudrais en ligne en face de leur ligne du genre :
année 1990 1991 1992
nombre 10645 11498 9781
quotient ...

Saurais-tu m'aiguiller stp ??

Merci en tout cas ;)
0
Costy
 
Merci beaucoup pour ton aide et pour le site ;) ça va me servir oui !

J'ai testé avec ce que tu m'as donné mais il n'y a que la 1ère ligne (les dates) qui s'affichent :(

Voici mon code de requêtes :

$departement= $_POST['dept'];
$an=1989;
$aujourd="select max(year(date_jour)) from donnees";
$result=mysql_query($aujourd); //permet d'exécuter la requête

$total=mysql_result($result,0);

echo "<br><br><br><br>";
$connect=mysql_select_db(stats_dvd,$db) or die("Impossible de selectionner la base :". mysql_error()) ;//Sélectionne la base de données par défaut.
//Tu écris ta requête :
while ($an<=$total) {
echo $an;

$JOFrance="select count(day(date_jour)/dvd) from donnees where year(date_jour)=$an";
$z=mysql_query($JOFrance);
$z1=mysql_result($z,0);
echo $z1;

$MoisRecord="select monthname(date_jour) MOISRECORD from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name=\"$departement\") group by month(date_jour) order by count(day(date_jour)/dvd) DESC limit 1";

$ValeurMois="select count(day(date_jour)/dvd) VALEURMOIS from donnees where year(date_jour)=$an and donnees.codedep=(select code from departement where name=\"$departement\") group by month(date_jour) order by count(day(date_jour)/dvd) DESC limit 1";

$sql="SELECT codedep,year(date_jour) ANNEE,count(day(date_jour)/dvd) NOMBREJOUR,((sum(dvd)/$z1)*100) QUOTIENT, '$MoisRecord' MOISRECORD, '$ValeurMois' VALEURMOIS from donnees where donnees.codedep=(select code from departement where name=\"$departement\") group by year(date_jour)";

$retour = mysql_query($sql)or die ('Erreur :'.mysql_error());
if (!$retour) {
echo "Impossible d'exécuter la requête ($sql) dans la base : " . mysql_error();
exit;
}
if (mysql_num_rows($retour) == 0) {
echo "Aucune ligne trouvée, rien à afficher.";
exit;
}
$an++;
};

$x=array();
$y=array();
$w=array();
$v=array();
$u=array();
$t=array();
$s=array();


Voici la construction du tableau :


echo "<STYLE TYPE='text/css'><!--
tr.encadre td { border-color:#FFFAFA;border-style:solid;}
--></STYLE> " ;
echo "Nombre de dvd";
echo "<br><br>";
/* $NbrCol=100;
$NbrLigne=0;
if ($retour != 0) {
$j = 1; */
echo "<table border='4'>";
// -------------------------
// DONNEES A AFFICHER dans la cellule
echo "<tr>";
echo "<td><b><font COLOR='Orange'>ANNEE</font></td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b><font COLOR='Orange'>".$y[]=$donnees['ANNEE']."</font></td>";}
echo "</tr>";
echo "<tr>";
echo "<td><b>NOMBREJOUR</td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b>".$x[]=$donnees['NOMBREJOUR']."</td>";}
echo "</tr>";
echo "<tr>";
echo "<td><b>QUOTIENT</td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b>".$w[]=$donnees['QUOTIENT']."</td>";}
echo "</tr>";
echo "<tr>";
echo "<td><b><font COLOR='Orange'>MOISRECORD</font></td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b><font COLOR='Orange'>".$v[]=$donnees['MOISRECORD']."</font></td>";}
echo "</tr>";
echo "<tr>";
echo "<td><b>VALEURMOIS</td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b>".$u[]=$donnees['VALEURMOIS']."</td>";}
echo "</tr>";

// -------------------------
echo '</table>';

Si tu aurais un conseil à me donner ?

Merci d'avance ;)
0
Arka
 
essaie de retirer tes "LIMIT 1" de tes requêtes, sinon ça limite le retour au premier resultat. (sinon dur de te donner une autre réponse sans avoir la structure de tes tables)
0
Costy
 
J'ai essayé mais rien n'y fait...

Voici mes tables :

- departement : code, nom, aire, numregion
- region : numero, nom
- donnees : date_jour, codedep, numregion, dvd (dvd=nombre de dvd)
0
Arka
 
juste une chose, pour etre sur:

Si tu as une opération à faire sur un résultat dans un while qui t'affiche un tableau, affiche d'abord ton resultat et ensuite fait ton opération (ou l'inverse, essaie pas de faire les deux en meme temps sinon il risque de ne prendre en compte que l'operation d'attribution de la valeur et pas l'affichage de celle ci).

dans ton code, ça donnera ça:

echo "<td><b><font COLOR='Orange'>MOISRECORD</font></td>";
while ($donnees = mysql_fetch_array($retour)) {
echo "<td><div align='middle'><b><font COLOR='Orange'>".$donnees['MOISRECORD']."</font></td>";$v[]=$donnees['MOISRECORD'];}
echo "</tr>";
0