Conseil pour tableau PHP

  • Auteur de la discussion Auteur de la discussion webac
  • Date de début Date de début
WRInaute occasionnel
Bonjour,

j'en appelle à nouveau à vos connaissance je cherche à créer un tableau dynamique alimenté par deux requêtes SQL,
la recupération des données s'effectue correctement mais je ne parviens pas à dispatcher les données et les mettre en forme.

Mon tableau se presente comme ceci :



et je souhaite inserer plusieurs colonnes apres ce tableau contenant les commandes d'autres magasins.

pouvez vous me mettre sur une bonne piste.

voici mes 2 requetes :

Code:
$req = "SELECT * from lignedecommande WHERE idcom IN ('$ids')";
Code:
$req2 = "SELECT * from lignedecommande WHERE Mag IN ('$magasin') AND Semaine= '$num_semaine'";

Merci
 
WRInaute occasionnel
est-ce que tu crées le tableau dans la foulée?

c'est souvent mieux de récupérer l'ensemble des données puis de passer à l'affichage comme ça tu organises la page comme tu veux...
 
WRInaute accro
avec un SELECT * FROM lignedecommande l1 LEFT JOIN lignedecommande l2 ON (l1.idcom = l2.idcom) WHERE l1.idcom IN () AND l2.Mag IN () AND l2.semaine = Num;

Tu peux surement le faire en une seule requête mais bon elle est surement fausse, faudrait que tu donnes des informations sur la structure, les champs et les types de champs de tes tables. Ensuite, expliquez un peu plus profondément ton problème.
 
WRInaute occasionnel
voici le code ça sera surement plus parlant:

Code:
<?php 
  include ('connexion.php');
  $idcom = $_POST['idcom'] ;
  $ids = @implode("', '", $_POST['idcom']) ; 
  $mag = $_POST['mag'] ;
  $magasin = @implode("', '", $_POST['mag']) ; 
  
  $req = "SELECT * from lignedecommande WHERE idcom IN ('$ids')";
  $res = mysql_query($req); 
  //place les données dans un tableau 
  $tablo='';
  while($data = mysql_fetch_assoc($res)) { $tablo[]=$data; } 

  $num_semaine = strftime("%U")-1 ;
  $req2 = "SELECT * from lignedecommande WHERE Mag IN ('$magasin') AND Semaine= '$num_semaine'"; 
  $res2 = mysql_query($req2); 
  echo $req2;
  //place les données dans un tableau 
  $tablo2='';
  while($data2 = mysql_fetch_assoc($res2)) { $tablo2[]=$data2;  } 
  

  echo '<center><table border=1 bordercolor=#000000>';
  echo '<tr>';
  echo '<td bgcolor="#FFFFFF">&nbsp;</td>';
  echo '<td colspan="4" bgcolor="#5389EE">Magasin</td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td bgcolor="#5389EE"><b><u><font color=#FFFFFF>Produits</u></b></font></td>';
  echo '<td bgcolor="#5389EE"><b><u><font color=#FFFFFF>S</u></b></font></td>';
  echo '<td bgcolor="#5389EE"><b><u><font color=#FFFFFF>Q</u></b></font></td>';
  echo '<td bgcolor="#5389EE"><b><u><font color=#FFFFFF>S-1</u></b></font></td>';
  echo '<td bgcolor="#5389EE"><b><u><font color=#FFFFFF>Q-1</u></b></font></td>';
  echo '</tr>'."\n"; 
  
  $nb=count($tablo); 
  
  for($i=0;$i<$nb;$i++){ 
    
  //les valeurs à afficher 
  $valeur1=$tablo[$i]['Produit']; 
  $valeur2=$tablo[$i]['Stock']; 
  $valeur3=$tablo[$i]['Qte']; 
  $valeur6=$tablo[$i]['Mag'];
  $valeur4=$tablo2[$i]['Stock']; 
  $valeur5=$tablo2[$i]['Qte']; 

  
  echo '<tr>'; 
  echo '<td><font size=2>'.$valeur1.'</font></td><td>'.$valeur2.'</td><td>'.$valeur3.'</td><td>'.$valeur4.'</td><td>'.$valeur5.'</td>'; 
  echo '</tr>'; 

  } 
  echo '</table>';  ?>
 
WRInaute occasionnel
VOICI LE SCHEMA DE MA TABLE :

`Produit` varchar(255) NOT NULL default '',
`Qte` varchar(255) NOT NULL default '',
`Stock` varchar(255) NOT NULL default '',
`Mag` varchar(255) NOT NULL default '',
`Date` date NOT NULL default '0000-00-00',
`Idcom` varchar(255) NOT NULL default '',
`Semaine` varchar(255) NOT NULL default ''
 
WRInaute occasionnel
l'idée c'est que pour un produit tu as différents type d'information qui se répètent sur plusieurs magasins

il faut donc qu'à l'affichage de ton tableau, tu es déjà toutes ces informations et que tu saches le nom des magasins en présence pour tous les produits. Une fois que tu as ça tu affiches en tête de colonne tous les magasins, ensuite sur chaque ligne, tu reportes les informations sur le produit en faisant gaffe de garder les informations dans l'ordre des magasins.

Le plus simple pour cet exercice me semble de récupérer d'abord les données dans un tableau avant de les afficher
 
WRInaute accro
Moi ca me semble un peu complexe pour rien ce code non ? Et pas du tout optimisé aussi :(

Déja ta table, j'imagine que c'est l'idcom la clé primaire ? faudrait la mettre en primary key, Semaine en tinyint, date ça serait mieux en timestamp, et les autres :(

Les deux requêtes qui peuvent être mise en une seule sans devoir utiliser des tableaux, juste le résultat de la requête :(
 
WRInaute occasionnel
peux tu me fournir un exemple pour me mettre sur la piste car étant débutant, l'exercice se révèle être plus compliqué que ce que je pensais.
 
WRInaute occasionnel
je vois que tou ça t'attriste beaucoup YoyoS. lol
mais que veux tu c'est ça les débutants!!
 
WRInaute accro
Bah je suis désolé mais pour moi faudrait changer le truc actuel, et je ne saisis pas tout ce que tu as voulu faire, et surtout ce que tu veux faire.

Je suis d'accord que tu es débutant, mais tu as loupé des bases importantes alors avant d'en arriver la !
 
WRInaute occasionnel
en fait ce que je souhaite faire c'est afficher le tableau comme ci-dessus répété par le nombre de magasins avec leurs données correspondantes.

C'est assez clair?
 
WRInaute accro
Donc en gros ceci ?

Commande1 Magasin1
produit Q
produit ...
produit
Commande2 Magasin2
produit
produit
produit
Commande3 Magasin3
...
 
WRInaute occasionnel
en fait comme ceci :



biensur les données des colonnes S, Qte ect.. ne sont pas les mêmes pour les differents magasins.
 
WRInaute accro
Mais a la place de Magasin1 Magasin2 Magasin3

Faudrait plutôt mettre Commande1 Commande2 Commande3 non ? vu que si un magasin fait plusieurs commandes ?
 
WRInaute accro
Bon ben j'ai une petite idée, je ferais par exemple deux requêtes, une pour récupérer tous les produits par ordre alphabétique pour toutes les commandes des magasins concernés en évitant les doublons (normalement ça devrait être une table spécifique pour les produits ...)

SELECT DISTINCT produits from lignedecommande WHERE idcom IN ('$ids')" ORDER BY produits;

Ensuite, je récupérerais toutes les informations des commandes concernant les magasins + commandes concernées le tout trié par idcommande et ensuite trié par produit.

SELECT * FROM lignedecommande WHERE idcom IN () AND Mag IN () AND semaine = Num ORDER BY idcom,produits

Ensuite, quand tu construits ton tableau, tu utilises les deux résultats de requête simultanément, tu regardes si $resreq1[$i] == $resreq2['produits'] pour afficher ta donnée, sinon, tu fais rien et tu passes à la colonne suivante.

Ca te dit quoi ?
 
WRInaute accro
Ou alors non, j'ai ptet inversé, ca dépend l'ordre de construction du tableau en php, on construit les lignes d'abord non ?

Donc tu trierais la deuxième requête sur les produits, puis par idcom, ensuite, tu compares les idcom pour afficher dans une bonne colonne.

Exemple, pour le produit Abricot, si dans la première colonne (première commande) il n'y en a pas, il suffit de le voir avec $resreq['idcom'] == $compteur pour afficher ou pas
 
Discussions similaires
Haut