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 :

une requête au lieu de deux ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut une requête au lieu de deux ?
    Bonjour,
    Je me prends la tête sur un problème assez simple je pense, je m'explique.
    J'ai une table t_press pour stocker des communiqués de presse en PDF (id, titre, date d'upload) qui peuvent être en plusieurs langues. J'ai donc une 2e table t_press_file avec l'id du communiqué de presse de la table t_press, la langue du fichier et le nom du fichier. Ceci me permet de rajouter autant de langues que je veux pour un seul communiqué.

    Ensuite je voudrais afficher ceci :
    - date du communiqué 1 : titre du communiqué 1
    langage 1 (qui sert de lien vers le PDF) | langage 2...

    - date du communiqué 2 : titre du communiqué 2
    langage 1 (qui sert de lien vers le PDF) | langage 2...

    Pour faire ça je n'ai pas trouvé d'autres soluces que de faires 2 requetes avec 2 boucles :
    Une pour selectionner les communiqués dans t_press puis une autre requete avec une boucle pour trouver les langues dispos de ce communiqué.

    ça marche très bien mais j'aurais bien aimé réussir à ne le faire qu'en une seule requête mais je n'arrive pas au résultat que je veux. Si je passe par une jointure, j'obtiens :
    - communiqué 1 - langue 1
    - communiqué 1 - langue 2
    - communiqué 2 - langue 1...
    Si j'essaye d'éviter l'écriture en plusieurs fois du titre du communiqué avec un DISTINCT ou un GROUP BY je n'arrive plus à récupérer les différentes langues dispos pour un communiqué...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM t_press RIGHT JOIN t_press_file ON (t_press.id=t_press_file.id_doc) WHERE online=1 GROUP BY t_press.id ORDER BY date DESC;
    J'espère avoir été clair, quelqu'un pourrait-il m'éclairer ? Merci d'avance.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: une requête au lieu de deux ?
    Tu avais la solution sous tes yeux. Je modifie un peu ta requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM t_press
    INNER JOIN t_press_file ON (t_press.id=t_press_file.id_doc)
     
    WHERE online=1
    ORDER BY t_press.date DESC;
    Ca te retournera effectivement un résultat du genre:
    - communiqué 1 - langue 1
    - communiqué 1 - langue 2
    - communiqué 2 - langue 1...

    Lors du parcours du résultat, à chaque changement de communiqué, tu afficheras:
    - date du communiqué N : titre du communiqué N
    langage N1 (qui sert de lien vers le PDF)

    et à chaque chagement de langue pour un même communiqué, tu affiches juste:
    | langage Nx (qui sert de lien vers le PDF)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci pour la requête et oui effectivement je veux bien aussi des lumières pour l'écriture PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete = "SELECT * FROM t_press INNER JOIN t_press_file ON (t_press.id=t_press_file.id_doc) WHERE online=1 ORDER BY t_press.date DESC";
    $resultat = mysql_query ($requete) or die;
     
    while($row = mysql_fetch_array($resultat)) {
    echo "<p>".$row["title"]."<br />\n";
    echo "<a href=\"".$row["file"]."\" target=\"_blank\">".$row["language"]."</a></p>";
    }
    car avec ça j'obtiens
    - communiqué 1 - langue 1
    - communiqué 1 - langue 2
    - communiqué 2 - langue 1...

    et je ne vois pas comment procéder

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Le parcours des résultats en PHP, ça donne à peu près ç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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    $requete = "SELECT * FROM t_press INNER JOIN t_press_file ON (t_press.id=t_press_file.id_doc) WHERE online=1 ORDER BY t_press.date DESC";
    $resultat = mysql_query ($requete) or die mysql_error() ; 
     
     
    $lastId=-1 ;
    $dansCommunique=false ;
     
    echo "<table>" ;
     
    while ($row = mysql_fetch_array($resultat) ) {
      $id = $row["id"] ;
     
      if ($id != $lastId) {
     
        // Ferme la ligne précédente, si elle existe
        if ($dansCommunique) {
          echo "</td></tr>" ;
        }
     
        $dansCommunique=true ;
     
        echo "<tr><td>" ;
     
        // Affiche date et titre du communiqué
        echo $row["date_upload"]  ." : ". $row["title"] ."<br/>" ;
     
      } else {
        echo " | " ;
      }
     
      // Affiche lien sur le fichier
      echo '<a href="' .$row["file"]. '">'. $row["language"] ."</a>" ;
     
      $lastId=$id ;
    }
     
     
    if (!$dansCommunique) {
       echo "<tr><td>Aucun article disponible" ;
    }
     
    echo "</td></tr>" ;
     
    echo "</table>" ;
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    ça marche nickel après adaptation à mon code.

    Code super clair et bien expliqué qui me permets de bien comprendre.

    Je te remercie BEAUCOUP d'avoir pris le temps de te pencher sur mon problème.

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

Discussions similaires

  1. faire une requête au lieu de N requêtes
    Par Gregory.M dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/08/2011, 20h01
  2. Une requête au lieu de deux
    Par Gouyon dans le forum Langage SQL
    Réponses: 11
    Dernier message: 03/05/2009, 16h10
  3. [MySQL] Après une requête globale comment utiliser deux champs
    Par gb76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 13h46
  4. Une requête, deux tables, fonction COUNT
    Par Nerva dans le forum Requêtes
    Réponses: 8
    Dernier message: 13/04/2006, 15h10
  5. [MySQL] Faire une requête recourant à deux bases de données
    Par bourvil dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/04/2006, 15h35

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