IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

récupérer et réorganiser les données de ma table SQL en HTML [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut récupérer et réorganiser les données de ma table SQL en HTML
    Bonsoir,
    Je souhaite récupérer mes infos et ensuite créer un tableau, mais je galère un peu et j'ai l'impression que je me complique la vie, pouvez vous me dire comment vous feriez ?
    Je dispose des tables (qui sont Type, Article, Caracteristique, Article_carac)

    type: (id, nom, description)
    article: (id, id_type, marque, modele, description, qutt)
    caracteristique: (id, id_type, nom)
    article_carac: : (id, id_art, id_carac, valeur)
    Je recupère mes infos avec cette requete:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT 
    type.nom type_nom, type.description type_description,
    article.marque article_marque, article.modele article_modele, article.qutt article_qutt,
    article.description article_description, article.id article_id,
    caracteristique.nom carac_nom,
    article_carac.id art_car_id, article_carac.valeur art_carac_val 
     
    FROM type
     
    LEFT JOIN article
    	ON type.id = article.id_type
    LEFT JOIN caracteristique
    	ON caracteristique.id_type = type.id
    LEFT JOIN article_carac
    	ON article_carac.id_art = article.id
    		AND article_carac.id_carac = caracteristique.id
     
    WHERE type.id = :id
     
    ORDER BY article.marque DESC

    ce qui me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    array (size=4)
      0 => 
        array (size=20)
          'type_nom' => string 'type nom Zone de texte' (length=22)
          0 => string 'type nom Zone de texte' (length=22)
          'type_description' => string 'type description Zone de texte' (length=30)
          1 => string 'type description Zone de texte' (length=30)
          'article_marque' => string 'article marque zone de texte' (length=28)
          2 => string 'article marque zone de texte' (length=28)
          'article_modele' => string 'article modele zone de texte' (length=28)
          3 => string 'article modele zone de texte' (length=28)
          'article_qutt' => string '10' (length=2)
          4 => string '10' (length=2)
          'article_description' => string 'article description zone de texte' (length=33)
          5 => string 'article description zone de texte' (length=33)
          'article_id' => string '3' (length=1)
          6 => string '3' (length=1)
          'carac_nom' => string 'bois' (length=4)
          7 => string 'bois' (length=4)
          'art_car_id' => string '1' (length=1)
          8 => string '1' (length=1)
          'art_carac_val' => string '-' (length=1)
          9 => string '-' (length=1)
      1 => 
        array (size=20)
          'type_nom' => string 'type nom Zone de texte' (length=22)
          0 => string 'type nom Zone de texte' (length=22)
          'type_description' => string 'type description Zone de texte' (length=30)
          1 => string 'type description Zone de texte' (length=30)
          'article_marque' => string 'article marque zone de texte' (length=28)
          2 => string 'article marque zone de texte' (length=28)
          'article_modele' => string 'article modele zone de texte' (length=28)
          3 => string 'article modele zone de texte' (length=28)
          'article_qutt' => string '10' (length=2)
          4 => string '10' (length=2)
          'article_description' => string 'article description zone de texte' (length=33)
          5 => string 'article description zone de texte' (length=33)
          'article_id' => string '3' (length=1)
          6 => string '3' (length=1)
          'carac_nom' => string 'beton' (length=5)
          7 => string 'beton' (length=5)
          'art_car_id' => string '2' (length=1)
          8 => string '2' (length=1)
          'art_carac_val' => string '10' (length=2)
          9 => string '10' (length=2)
      2 => 
        array (size=20)
          'type_nom' => string 'type nom Zone de texte' (length=22)
          0 => string 'type nom Zone de texte' (length=22)
          'type_description' => string 'type description Zone de texte' (length=30)
          1 => string 'type description Zone de texte' (length=30)
          'article_marque' => string '-lepetit' (length=8)
          2 => string '-lepetit' (length=8)
          'article_modele' => string '-' (length=1)
          3 => string '-' (length=1)
          'article_qutt' => string '0' (length=1)
          4 => string '0' (length=1)
          'article_description' => string '' (length=0)
          5 => string '' (length=0)
          'article_id' => string '5' (length=1)
          6 => string '5' (length=1)
          'carac_nom' => string 'bois' (length=4)
          7 => string 'bois' (length=4)
          'art_car_id' => null
          8 => null
          'art_carac_val' => null
          9 => null
      3 => 
        array (size=20)
          'type_nom' => string 'type nom Zone de texte' (length=22)
          0 => string 'type nom Zone de texte' (length=22)
          'type_description' => string 'type description Zone de texte' (length=30)
          1 => string 'type description Zone de texte' (length=30)
          'article_marque' => string '-lepetit' (length=8)
          2 => string '-lepetit' (length=8)
          'article_modele' => string '-' (length=1)
          3 => string '-' (length=1)
          'article_qutt' => string '0' (length=1)
          4 => string '0' (length=1)
          'article_description' => string '' (length=0)
          5 => string '' (length=0)
          'article_id' => string '5' (length=1)
          6 => string '5' (length=1)
          'carac_nom' => string 'beton' (length=5)
          7 => string 'beton' (length=5)
          'art_car_id' => null
          8 => null
          'art_carac_val' => null
          9 => null
    Nom : donnee recoltée.png
Affichages : 157
Taille : 10,2 Ko

    et je souhaite créer un tableau pour arriver à :
    Nom : tableau2.png
Affichages : 137
Taille : 3,5 Ko

    mais pour le moment je n'arrive qu'à:
    Nom : tableau1.png
Affichages : 129
Taille : 3,7 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <table BORDER=1px CELLSPACING=2 CELLPADDING=1>
       <tr>
    	<th>marque</th>
    	<th>modèle</th>
    	<?php
    	while($donnees = $req->fetch())
    	{
    		?><th><?php echo $donnees['carac_nom'];?></th>
    		<?php $tableau[] = $donnees;
    	}
    	?>
       </tr>
     
    <?php 
    	foreach($tableau as $cle)
    	{	
    		if($cle['article_id']!=$article_id_actuelle)
    		{
    			$article_id_actuelle=$cle['article_id'];
    			?>
    			<tr>
    			<?php
    			echo '<td>'.$cle['article_marque'].'</td>';
    			echo '<td>'.$cle['article_modele'].'</td>';
    		}
    		echo '<td>'.$cle['art_carac_val'].'</td>';
    	}
     
    ?>
    </table>
    et je ne sais pas trop qu'elle chemin prendre pour réussir.

    merci d'avoir lus et de prendre le temps de m'aider.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Personnellement, je réalise toujours une requête rien que pour les entêtes de colonnes.
    En effet, si votre table article est vide, les entêtes le seront aussi. Ca permet également de les construire plus facilement, et la requête ne devrait pas être trop lourde vu qu'il s'agit de la table "caractéristiques" et que théoriquement, on devrait difficilement arriver au million de lignes =D

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    donc tu fais 2 requetes.
    entre temps j'ai avancé et je suis parti sur une requete sql que je réorganise dans un tableau php puis je construirai mon tableau html.
    j'obtiens les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    array (size=4)
      0 => 
        array (size=4)
          'marque' => string 'marque' (length=6)
          'modele' => string 'modèle' (length=6)
          2 => string 'bois' (length=4)
          4 => string 'beton' (length=5)
      3 => 
        array (size=4)
          'marque' => string 'article marque zone de texte' (length=28)
          'modele' => string 'article modele zone de texte' (length=28)
          2 => string '-' (length=1)
          4 => string '10' (length=2)
      5 => 
        array (size=3)
          'marque' => string '-lepetit' (length=8)
          'modele' => string '-' (length=1)
          4 => string '-' (length=1)
      6 => 
        array (size=2)
          'marque' => string '-8888' (length=5)
          'modele' => string '-44444' (length=6)
    avec ce code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($donnees = $req->fetch())
    {
    $tableau['0']['marque']='marque';
    $tableau['0']['modele']='modèle';
    if(!empty($donnees['art_car_id_car'])){
    $tableau['0'][$donnees['art_car_id_car']]=$donnees['carac_nom'];}
     
     
    $tableau[$donnees['article_id']]['marque']=$donnees['article_marque'];
    $tableau[$donnees['article_id']]['modele']=$donnees['article_modele'];
    if(!empty($donnees['art_car_id_car'])){
    $tableau[$donnees['article_id']][$donnees['art_car_id_car']] = $donnees['art_carac_val'];}
    }
    Comme je n'ai pas encore construit le tableau html et donc pas encore eu de pb, qu'en penses tu ?
    je vois que tu es belge ! je suis à liège et toi ?

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Je suis de Namur

    Dans ton cas, le vrai problème est que tu mélanges valeurs fixes et variables.
    En effet, lorsque tu construis tes <th>, les 2 premières sont fixhes, et ensuite, tu parcourais ton array $donnees.
    Or, la façon dont tu fais ta boucle, tu auras forcément 2 colonnes multipliées par le nombre de résultats (tu avais 2 lignes, donc 2*2 => 4 colonnes => bois + beton + bois + beton = 4 bien 4 colonnes)

    Pour ton code actuel, difficile de répondre : il n'est pas indenté et il manque une accolade. Je dirais que ça me parait bien compliqué pour quelques chose qui ne l'est pas théoriquement.
    J'ai également un peu de mal à comprendre pourquoi tu souhaites afficher ces données de cette façon puisque d'après ce que je comprends, une "ligne" n'aura pas forcément l'info "bois" ou "béton" et donc, ne renverras rien du tout pour ces 2 caractéristiques

    Voici un petit exemple de ce que j'aurais fait (j'utiliserai les méthodes mysql_* pour la facilité d'écriture) :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    // Table head
    $table_header = array();
    $sql = "SELECT * FROM caracteristiques"; // Je ne fais pas de GROUP BY vu que je suppose que les noms sont uniques !
    $q = mysql_query($sql);
    while($r = mysql_fetch_assoc($q)) {
    	$table_header[] = $r;
    }
    // Data
    $table_data = array();
    $sql = "Ton gros select avec plein de join ICI";
    $q = mysql_query($sql);
    while($r = mysql_fetch_assoc($q)) {
    	$table_data[] = $r;
    }
    ?>
     
    <table>
    	<thead>
    		<tr>
    			<th>Marque</th>
    			<th>Modèle</th>
    			<?php
    			foreach ($table_header AS $v) {
    				echo '<th>'.$v['nom'].'</th>';
    			}
    			?>
    		</tr>
    	</thead>
    	<tbody>
    	<?php
    		// Ici tu remet ta boucle de résultats
    	?>
    	</tbody>
    </table>

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    Cool namur c'est pas si loin j'ai testé un resto asiatique au bord de la rivière "Chez..." c'était sympa

    Merci bcp pour la réponse détaillée, c'est vraiment top.
    les caractéristiques ne sont pas uniques,
    j'arrange un peu, je test et je te dis quoi : ).

    bon j'arrange donc je n'ai pas refais ma requete sql mais je l'ai répartis en 2 tableaux php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    array (size=3)
      6 => 
        array (size=2)
          'marque' => string 'marque 6' (length=8)
          'modele' => string 'modele 6' (length=8)
      3 => 
        array (size=4)
          'marque' => string 'marque 3' (length=8)
          'modele' => string 'modele 3' (length=8)
          2 => string '-' (length=1)
          4 => string '10' (length=2)
      5 => 
        array (size=3)
          'marque' => string '-lepetit' (length=8)
          'modele' => string '-' (length=1)
          4 => string '-' (length=1)
    array (size=1)
      0 => 
        array (size=4)
          'marque' => string 'marque' (length=6)
          'modele' => string 'modèle' (length=6)
          2 => string 'bois' (length=4)
          4 => string 'beton' (length=5)
    
    
    
    marque modèle bois beton
    marque 6 modele 6
    marque 3 modele 3 - 10
    -lepetit - -???
    l'affichage est bon, par contre je vais avoir un problème à cause des champs vide de ma bdd qui font des trous dans mon tableau et qui empêche les valeurs d'etre dans leur bonne colonne. (comme la cellule mis en rouge dans le tableau au dessus)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Points : 108
    Points
    108
    Par défaut
    bon je coince encore, voila le resultat actuel qui n'est toujours pas le bon la 4e ligne 3e colonne devrait tomber en 4e colonne:
    Nom : construct tableau2.png
Affichages : 131
Taille : 3,3 Ko

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <table BORDER=1px>
    <tr>
    <?php
    foreach($tableau1 as $value)
    {
    	echo '<th>'.$value.'</th>';
    }
    ?>
    </tr>
    <?php
    foreach($tableau as $value => $key)
    {
    	echo '<tr>';
    	foreach($tableau1 as $val => $ke)
    	{
    		foreach($key as $vava => $keke)
    		{
    			if($val==$vava){echo '<td>'.$keke.'</td>';}
    		}
    	}
    	echo '</tr>';
    }
    ?>
    </table>
    et a nouveau mes tableaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    tableau1
    array (size=3)
      6 => 
        array (size=2)
          'marque' => string 'marque 6' (length=8)
          'modele' => string 'modele 6' (length=8)
      3 => 
        array (size=4)
          'marque' => string 'marque 3' (length=8)
          'modele' => string 'modele 3' (length=8)
          2 => string 'bois art3' (length=9)
          4 => string 'beton art3' (length=10)
      5 => 
        array (size=3)
          'marque' => string '-lepetit' (length=8)
          'modele' => string 'modele 5' (length=8)
          4 => string 'beton art5' (length=10)
    tableau
    array (size=4)
      'marque' => string 'marque' (length=6)
      'modele' => string 'modèle' (length=6)
      2 => string 'bois' (length=4)
      4 => string 'beton' (length=5)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher les données d'une table SQL dans un JComboBox
    Par bozmin dans le forum Composants
    Réponses: 1
    Dernier message: 13/11/2011, 18h29
  2. [2005] [DataMining] Exporter les données vers une table SQL
    Par mafanta dans le forum SSAS
    Réponses: 2
    Dernier message: 26/10/2011, 14h27
  3. [MySQL] regrouper dans un tableau les donnée de plusieur table SQL
    Par Mais.Ouais dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/05/2009, 10h47
  4. Réponses: 1
    Dernier message: 28/08/2008, 22h53
  5. Réponses: 1
    Dernier message: 25/04/2008, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo