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

Requêtes MySQL Discussion :

requete mysql sur plusieurs tables -> affichage sur plusieurs tables !


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Points : 54
    Points
    54
    Par défaut requete mysql sur plusieurs tables -> affichage sur plusieurs tables !
    Bonjour !

    Voila j'ai un problème avec une requête MySQL sur plusieurs tables

    Mes tables :

    merch_rubriques
    id...nom.....classement
    1....CD........3
    2....TShirt....1
    3....Sweat...2

    merch_articles
    id..id_rubrique...nom........image.........position
    1...2..................Fantom.....fantom.jpg...2
    2...1..................Lunatic.....cd.jpg.........1
    3...2..................Monkey.....monkey.gif...1
    4...1..................Promo.......promo.jpg....2

    Je m'explique,
    j'aimerais afficher plusieurs tables html, chacune correspondant à une rubrique.
    Ces tables seraient classées par "classement ASC" et contiendraient les articles associés, classés par "position ASC".

    Pour l'instant (je sais c'est très moche), je fais ça :
    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
     
    $query1 = mysql_query("SELECT * FROM merch_rubriques ORDER BY classement ASC;");
     
    while ($row1 = mysql_fetch_array($query1)) {
     
        echo "<a href=\"merch.php?add=".$row1["id"]."\">Ajouter un Article</a>";
        echo "<table>\n";
        echo "<tr><th colspan=\"3\">Rubrique&nbsp;: ".$row1["nom"]."</th></tr>\n";
        echo "<tr>\n";
        echo "<th>Position</th>\n";
        echo "<th>Image</th>\n";
        echo "<th>Nom</th>\n";
        echo "<th colspan=\"2\">Action</th>\n";
        echo "</tr>\n";
     
        $query2 = mysql_query("SELECT * FROM merch_articles WHERE id_rubrique = ".$row1["id"]." ORDER BY position ASC;");
     
        while ($row = mysql_fetch_array($query2)) {
            echo "<tr>\n";
            echo "<td>".$row["position"]."</td>\n";
            echo "<td><img src=\"".$target.$row["image"]."\" alt=\"\" /></td>\n";
            echo "<td>".$row["nom"]."</td>\n";
            echo "<td><a href=\"?mod=".$row["id"]."\">modifier</a></td>\n";
            echo "<td><a href=\"?supprimer=".$row["id"]."&amp;img=".urlencode($row["image"])."\" onclick=\"return confirm('Voulez vous vraiment supprimer l\'article ?');\">supprimer</a></td>\n";
            echo "</tr>\n";
        }
     
        echo "</table>\n";
     
    }
    Pour l'instant il n'y a pas grand chose dans mes tables donc ça passe encore bien, mais plus tard j'y vois pas beau...

    Alors j'ai bien essayé des requêtes du genre
    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
     
    $query = mysql_query("SELECT 
    merch_articles.id, 
    merch_articles.id_rubrique AS idRubArt, 
    merch_articles.nom AS nomArt, 
    merch_articles.image, 
    merch_articles.position, 
    merch_rubriques.id AS idRub, 
    merch_rubriques.nom, 
    merch_rubriques.classement 
    FROM 
    merch_articles, 
    merch_rubriques 
    WHERE 
    merch_articles.id_rubrique = merch_rubriques.id 
    ORDER BY classement ASC;");
    Le problème est que ça ne sort qu'une table, dont les colonnes sont
    nom de la rubrique
    nom de l'article
    etc...
    En plus je ne peux que classer, soit les rubriques, soit les articles ; mais pas les deux en même temps.

    Le schéma de ce qu'il me faudrait :

    .........RUBRIQUE 1..........
    IMAGE 1.....ARTICLE 1.....
    IMAGE 2.....ARTICLE 2.....

    .........RUBRIQUE 2..........
    IMAGE 1.....ARTICLE 1.....
    IMAGE 2.....ARTICLE 2.....


    J'ai beau chercher dans la doc MySQL, sur les forums et dans les cours, je ne trouve rien se rapportant à mon problème.

    Et c'est là que j'en viens (enfin) à vous...
    Quelqu'un a-t-il déjà rencontré ce problème, qui saurait m'aiguiller ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    pour ton probleme de classement, tu peut tres bien faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    order by champ 1,champ2
    ce qui vas te classer tes resultat comme ca:

    champ 1 ... champ2
    1 .................... 1
    1 .................... 2
    1 .................... 3
    2 .................... 1
    2 .................... 2
    2 .................... 3
    3 .................... 1
    3 .................... 2
    4 .................... 1


    Ton second probleme n'est pas sql, ta requete est bonne, tu ne pourra jamais recevoir deux tble a partir d'une requete.

    Je te conseil de modifier ton code PHP,
    garde la premiere boucle qui te renverra a chaque tour une ligne contenant ta rubrique et ton article
    compare la rubrique a la precedente (en creant une variable $ancienneRubrique dans laquelle tu met l'id de la rubrique traité) si c la meme tu ajoute une ligne dans ton tableau HTML pour l'article sinon tu ferme le tableau HTML de ton ancienne rubrique et tu en ouvre un nouveau.

    j'espere que je me suis bien exprimer et que ca pourra t'aider
    Dernière modification par Invité ; 16/03/2007 à 14h28.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    oui c nickel tu m'aides vachement, je vais essayer ta solution en ce qui concerne php
    et puis merci pour le ORDER BY champ1, champ2
    Je ne connaissais pas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Merci encore greffzion, ça marche nikel avec
    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
    $query = mysql_query("SELECT 
    merch_articles.id, 
    merch_articles.id_rubrique AS idRubArt, 
    merch_articles.nom AS nomArt, 
    merch_articles.image, 
    merch_articles.position, 
    merch_rubriques.id AS idRub, 
    merch_rubriques.nom, 
    merch_rubriques.classement 
    FROM 
    merch_articles, 
    merch_rubriques 
    WHERE 
    merch_articles.id_rubrique = merch_rubriques.id 
    ORDER BY classement,position ASC;");
    
    while ($row = mysql_fetch_array($query)) {
        
        $rubActuelle = $row["idRubArt"];
        if ($rubAncienne !== $rubActuelle) {
            echo "<h2>".$row["nom"]."</h2>\n";
        }
        
        echo "<p><img src=\"".$target.$row["image"]."\" alt=\"\" /><br />".$row["nomArt"]."</p>\n";
        
        $rubAncienne = $rubActuelle;
        
    }
    Ce n'est plus avec des <table> mais le principe reste le même

  5. #5
    Invité
    Invité(e)
    Par défaut
    si je peut me permettre,


    il ya une toute petite erreur...mais je suis assez perfectionniste!

    le: $rubAncienne = $rubActuelle;
    il faudrait le placer dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        if ($rubAncienne !== $rubActuelle) {
            echo "<h2>".$row["nom"]."</h2>\n";
        }
    ce qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        if ($rubAncienne !== $rubActuelle) {
            echo "<h2>".$row["nom"]."</h2>\n";
            $rubAncienne = $rubActuelle;
        }

    apres, ca marche dans les deux cas...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Ok pour la modif mais (pardonne mon ignorance) je ne vois pas ce que cela change. Peux-tu m'expliquer ?

    si par exemple je veux rajouter un <div class="fin_de rubrique"></div> après chacun des derniers articles de rubriques, ça change la donne ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    En fait si tu ne met pas le: $rubAncienne = $rubActuelle; dans le if, ca l'executera pour chaque article or tu n'a besoin de le faire qu'a chaque rubrique!

    Ca ne change pas grand chose, mais c une bonne habitude a prendre...


    si tu veut rajouter un <div class="fin_de rubrique"></div> met le dans le if !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    ça m'éclaire bien en effet, merci pour tout Greffzion !!

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

Discussions similaires

  1. [WD17] vider ma table d'affichage sur periode apres avoir changer de date
    Par didier.dev dans le forum WinDev
    Réponses: 1
    Dernier message: 21/03/2015, 16h10
  2. Affichage sur PC des données récupérées sur un port parallele
    Par mic68hc11 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/07/2012, 09h06
  3. Question sur la zone d'affichage sur l'écran
    Par Bundy*Al dans le forum OpenGL
    Réponses: 1
    Dernier message: 30/05/2008, 22h59
  4. Requete MySQL sur plusieurs tables
    Par romulus67 dans le forum Requêtes
    Réponses: 10
    Dernier message: 03/07/2006, 17h45
  5. Requete MySQL avec un Rand sur une table
    Par tom06440 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/01/2006, 17h37

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