Parcourir Tableau dynamiquement

alex -  
 alex -
Bonjour,

Je me permets de vous demander votre aide pour un projet que j'essais de réaliser dans mon stage,

J'ai en fait un grand tableau de 60 cellulles (départagé en 12 parties) et il faut que chaque cellulle soit généré par des données dans une BDD


<table width="200" border="1">
  <tr>
    <td>select blablablabla</td>
   <td>select blablablabla</td>
   <td>select blablablabla</td>
    <td>select blablablabla</td>
     <td>select blablablabla</td>
  </tr>


Pour moi comme ça c'est invivable 60requetes SQL (ce que souhaite faire mon tuteur) je me pose la question de la performance.

Sachant que dans la table ou on récupere la valeur on a aussi le nom de la colonne et le nom de la ligne, J'ai réfléchis à un autre Algo dites moi ce que vous en pensez, si c'est comme ça qu'il faut faire ? avec quel langage le faire au mieux (JS , php , html ?) et si quelqu'un pouvait me guider car je n'ai jamais fait de web jusqu'a hier ^^ ( je viens du C,C++,VBA)
Mon idée 2 boucles imbriquées
Pour chaque cellulle dans colonne
Pour chaque cellulle dans ligne
Si nom ligne = nom_ligne_dans la BDD && nom colonne = nom de la colonne dans BDD
Copier Valeur
Fin si
Fin pour
Fin pour

Par contre je ne visualise pas comment en profiter pour créer mes TD et TR dynamiquement avec la boucle .

J'espere que j'aurais un peu d'aide :)

Alex
A voir également:

9 réponses

Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
En php tu peux faire ça normalement sans trop de soucis si j'ai bien compris ton problème.

Avec une boucle While ou un foreach sur ton tableau de résultat de ta requête.

Tu as quoi comme base de données? Mysql?

quand tu dis 60 cellules en 12 parties c'est 12 colonnes ou 12 ligne?
Enjoy!
1
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
un exemple de ce que tu peux faire en php facilement

prenons mon tableau $query qui contient le résultat d'une requête à ma base.

<?php
$pdo = new PDO ("mysql:host=$hostname;dbname=$dbname","$username","$pw");

$query = $pdo->prepare("select champ1, champ2,champ3 FROM tbl_name");
$query->execute();
?>
<table>
	<thead>
		<th>Champ1</th>
		<th>Champ2</th>
		<th>Champ3</th>
	</thead>
	<tbody>
<?php
foreach($query as $q) {
?>
	<tr>
		<td><?php echo $q['champ1']; ?></td>
		<td><?php echo $q['champ2']; ?></td>
		<td><?php echo $q['champ3']; ?></td>
	</tr>
<?php
}
?>
	</tbody>
</table>
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
ah ok, j'avais pas compris qu'il y avait plusieurs tableaux ^^
hum tu as un indicateur pour savoir quand changer de tableau? tu pourrais mettre ici un résultat d'une de tes requêtes histoire que je comprenne bien tout?
1
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
salut,

j'ai toujours pas compris ce que tu veux faire -_-' excuse moi je suis un peu lent du bulbe ^^.
Je comprends pas quand tu dis vérifier si la valeur existe ou pas.

Si elle est dans ta base c'est qu'elle existe non?
1
alex
 
Merci pour ta réponse,

Alors c'est une BDD Oracle,
Et je me suis mal exprimé c'est encore pire car jviens de compter et c'est 12 tableau ( 12 DIV) mais ensuite dans chaque tableau minimum 12*5 cellulle à chaque fois .
Donc la on est d'accord 150 Cellulles je ne ferais pas 150 Select ^^ .


J'aime bien cette méthode , par contre je ne visualise pas comment crée ces TD et TR dynamiquement ( les tableaux ne sont pas les mêmes ... )


Merci en tout cas , et super que tu ai compris mon idée
0

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

Posez votre question
al
 
Un exemple :
dans la table :
0
al
 
Id , numéro d'indice , nom_colomne, nom_row, (et dautre chose inutiles )
où numéro indice = chaque cellulle a un indice pour pointer plus vite (il pensait faire mille requetes ^^)


Le résultat serait apres cette requete :
soit 1,2,3,4,5 et une image, ( chaque chiffre à sa signification)
1 = OK ....

Pour moi L'indicateur serait le groupe a chaque fois :
exemple :
Busines , equipe It , la compta , les Rh
0
al
 
avant :


"select valeur, numéro d'indice where date"
Maintenant moi je voudrais faire
"Select numéro d'indice,valeur , nom_colomne, nom_ligne"
dans mes boucles je compare avec les nom qu'on a deja dans le tableau par exemple .


Le résultat :
"4","3","business_team","profit and lost"

explication:
l'indice 4 = le numero de la cellule (car cela provient d'un truc en VBA qui génère les données)
3 : correspond à l'information "Pas opérationnel"
"nom_colonne" = le groupe
"nom_ligne" = la spécialisation
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
j'ai une idée d'une solution mais c'est un peu dégueu, tu la veux? c'est vite fait par contre
0
al
 
Oui Pourquoi pas ... à la limite j'essaierais de l'optimiser :)
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
<?php

$tab1  = "<table>";
$tab2  = "<table>";
$tab3  = "<table>";
$tab4  = "<table>";


$result = // resultat de la requête SQL

for($i=0;$i<sizeof($result);$i++)
{
	if($result[$i]['nom_colomne'] == "Business")
	{
		$tab1 .= "<tr>";
		$tab1 .= "<td>".$result[$i]['numéro d indice']."</td>";
		$tab1 .= "<td>".$result[$i]['valeur']."</td>";
		$tab1 .= "<td>".$result[$i]['nom_row']."</td>";
		$tab1 .= "</tr>";
	}
	else if($result[$i]['nom_colomne'] == " equipe It")
	{
		$tab2 .= "<tr>";
		$tab2 .= "<td>".$result[$i]['numéro d indice']."</td>";
		$tab2 .= "<td>".$result[$i]['valeur']."</td>";
		$tab2 .= "<td>".$result[$i]['nom_row']."</td>";
		$tab2 .= "</tr>";
	}
	else if($result[$i]['nom_colomne'] == "compta")
	{
		$tab3 .= "<tr>";
		$tab3 .= "<td>".$result[$i]['numéro d indice']."</td>";
		$tab3 .= "<td>".$result[$i]['valeur']."</td>";
		$tab3 .= "<td>".$result[$i]['nom_row']."</td>";
		$tab3 .= "</tr>";
	}
	else 
	{
		$tab4 .= "<tr>";
		$tab4 .= "<td>".$result[$i]['numéro d indice']."</td>";
		$tab4 .= "<td>".$result[$i]['valeur']."</td>";
		$tab4 .= "<td>".$result[$i]['nom_row']."</td>";
		$tab4 .= "</tr>";
	}

	 
	
	for($y=0;$y<5;$y++)
	{
		echo $tab.$y;
		echo "</table>";
	}
}
?>
0
alex
 
Eh bah c'est pas si mal que ça , c'est même bien , j'ai changé les if en switch
et ça me fait encore moins de ligne (bon c'etait pas compliqué ce que j'ai fait^^ )
switch :
case 0 : "business"
case 1 : "equipe IT"
case 2
case 3
et le remplissage .


Par contre c'est le contenu qui varit (des cellule où il y a de l'info et d'autres yen a pas ce mois) ... le tableau qu'il faut parcourir pour stocker garde le même nombre de cellule. La par contre il faudra utiliser du JS n'est ce pas ? un truc qui compte les colonnes du type .getElement ou on pourrait faire ça en php ?
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
non il faudra le faire en js je pense, par contre je n'ai pas bien compris ton soucis, si tu peux ré-expliquer ^^
0
alex
 
Bonjour depuis ^^,

Alors j'ai bien avancé, en fait j'ai choisis de faire un truc de ce type :
<?php
                                    for ($i = 0; $i <= 3; $i++)
                                    {
                             ?>
                                    <tr>
                             <?php
                                    for ($j = 0; $j <= 7; $j++)
                                    {
                             ?>
                                    <td> 
                                        <?php 
                                        
                                         if (in_array($Legende[0],$tableau)){// && in_array($legende[1],$tableau[$i][1])) {
($Legende[0].$tableau[$i][1]);
                                              echo"ok";
                                           }                                     
                                              ?> 
                                    </td>
                             <?php
                                    }
                             ?>
                                    </tr>
                             <?php
                                    }
                                
                             ?>



Donc une boucle imbriquée dans une autre qui me crée le nombre voulu de colonne et ligne ( le chiffre sera remplacé par un "count($i)" des que la requête sera finalisée .
Maintenant ce que je disais la derniere fois c'est que j'aimerais en créant ma cellule directement chercher si la valeur existe et la coller directement (pour éviter de refaire un "for each" de 150 cellule)

Mais le "in_array" ne me donne rien de bon car il veut que je lui renseigne une valeur de recherche or moi je ne la connais pas d'avance ... je pense devoir faire une 3e boucle ... mais ça fait beaucoup ... :(

Ton avis ?

Merci
0
alex
 
Salut,
Ne te prends pas la tête j'ai trouvé comment faire j'avais un probleme de "casse" la honte :( .

Du coup j'ai fais un truc pas mal

2 boucle imbriqué et un TR et un TD a chaque occurence.

Pour ceux que ça interesse ça permet meme de couper sa cellule en 3 partie
   <?php for ($i = 1; $i < sizeof($aaaa); $i++){ ?>
                                    <tr colspan="3">
                                 <?php for ($j = 0; $j < sizeof($aaaa); $j++){ ?>
                                    
                                      <td class="left"><div id=<?php echo '"'.$bdd[$i].'_'.$Bdd[$j].'"' ?>></div></td>
                                                
                                             <td class="center">
                                            </td>
                                             <td class="right">
                                            </td>                         
                                       <?php }?>
                                    </tr>

<?php } ?>

N'hésites pas si quelqu'un veut une explication .


Par hasard tu aurais des connaissances en JS ?


Car j'aimerais pour une de mes colonne faire passer une image qui se raffraichit , en faisant sa avec ajax le but est de ne raffraichir que l'icone :) et non toute la template.
je n'arrive pas à le faire transmettre

         $.ajax({
	      url: 'index.php?ctl=global&act=accueil',
	      type: 'post',
	      data:'month='+month,
	      dataType: 'json',
	      success: function(data) { 
                 for(i=0;i<data.length;i++){
                     if (data[i][4]== "4"){                       
                     Ici j'aimerais mettre l'image qui est dans la colonne 4 a chaque fois du tablea     
                    }   
                     $("#"+data[i][1]+"_"+data[i][2]).html(data[i][4]);                    
                 }
              }
         });       
     };
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
salut,
Tout d'abord content que tu es trouvé une solution à ton soucis.
Pour js oui j'ai quelques connaissances,
il faut que tu utilises le .append() de jquery pour mettre ton image dans la colonne.

Sinon il faut que tu identifies la colonne, ce que tu peux faire c'est mettre à ta colonne un attribut quand tu génères ton tableau

(ce que tu as fais avec ton $("#"+data[i][1]+"_"+data[i][2]) )

il faut que tu utilises la fonction .append()
du style

$("#ma_colonne").append("<img src="...." />");
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
ah oui et l'évènement je crois que c'est .hover() pour le survol
0
Natio78 Messages postés 719 Date d'inscription   Statut Membre Dernière intervention   96
 
ah mais ton image se rafraichit quand et pourquoi? car je ne suis pas sur que tu sois dans la bonne direction avec de l'ajax, un simple bout de javascript pourrait suffir. Ajax est nécessaire si tu as besoin de données côté serveur pour traiter ta requête
0
alex
 
Merci en tout cas, j'identifis deja ma colonne :

$("#"+data[i][1]+"_"+data[i][2]).append("<img src="icone_orange.png"/>");
est-ce la bonne méthode ?

j'ai toujours une erreur :(
0
alex
 
Ah je me trompe peut être en utilisant L'ajax c'est possible ,
En fait, j'ai un tableau de données et suivant la sélection du mois , licone dans la cellule change de couleur suivant les indicateurs fournis .
et ces icones correspondent à des chiffres (qui sont stocké en Base)
1 sera mon icone rouge
2 mon icone vert
3 mon icone noir

Ces 3 icones sont stockées dans mon projet en format png :)
0