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 :

jointure de tables pour résultat imbriqués en une requete


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Par défaut jointure de tables pour résultat imbriqués en une requete
    Bonjour,
    voila je suis enseignant et je réalise un cahier de texte electronique.
    Ca fait un moment que je parcours les docs et forums et je n'arrive pas à bien comprendre comment résoudre mon problème alors je me lance.
    J'ai une table séance:
    idseance idprof date contenu

    une table polys
    idfichier nomfichier titre

    une table fichierseance
    idfichier idseance

    Je voudrais afficher toutes les séances du prof "idprof" avec la date le contenu et les polys éventuellement associés à chaque séance.

    J'ai pensé à obtenir le nom de tous les fichiers dans une chaine de caractère que je split après la requete mais je ne sais pas bien comment faire.

    Merci pour votre aide
    Matcheux

  2. #2
    Membre chevronné Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Par défaut
    Un truc du genre fonctionnerai (ici l'idprof =1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT idfichier,date,contenu FROM séance,polys,fichierseance WHERE séance.idprof=1 AND séance.idseance = fichierseance.idseance AND fichiersenace.idfichier = polys.idfichier;
    Cette requete te donne l'id du fichier, la date et le contenu des cours du prof portant l'id 1 !
    Est ce que tu voulais ?
    Sinon, repost

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Par défaut
    En fait j'aimerais obtenir

    date contenu nomfichier1-nomfichier2-nomfichier3 ...

    s'il y a trois fichiers associés à cette séance.

    mais il se peut qu'il n'y ai aucun fichier ou plus de trois ou ...

    je précise : mon hébergeur utilise la version 4.0.22 de Mysql.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Par défaut
    Jette un œil dans le manuel à GROUP_CONCAT.
    Tu devrais pouvoir faire un SELECT ..., GROUP_CONCAT(nomfichier) qui correspond à ce que tu recherches.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Par défaut
    oui mais group_concat() a été ajouté à mysql 4.1 et je mon hébergeur me propose la 4.0.22 ... c'est là le problème.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Par défaut
    Citation Envoyé par matcheux
    oui mais group_concat() a été ajouté à mysql 4.1
    Gnnh? ah oui tiens, désolé j'étais persuadé qu'il datait de la 4.0 stable

    Dans ce cas tu peux simplement utilisé PHP pour faire la même chose. Quelque chose dans ce style:
    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
    $sql = 'SELECT s.idseance, s.date, s.contenu, p.nomfichier
            FROM seance s, polys p, fichierseance f
            WHERE s.idprof = 1
              AND p.idseance = s.idseance
              AND f.idfichier = p.idfichier
            ORDER BY s.idseance';
    $result = mysql_query($sql);
     
    $prev_id = 0;
    $buffer = $rowset = array();
    while ($row = mysql_fetch_assoc($result))
    {
    	if ($row['idseance'] != $prev_id)
    	{
    		if ($buffer)
    		{
    			$buffer['fichiers'] = implode('-', $buffer['fichiers']);
    			$rowset[] = $buffer;
    		}
     
    		$buffer = $row;
    		$buffer['fichiers'] = array();
     
    		$prev_id = $row['idseance'];
    	}
    	$buffer['fichiers'][] = $row['nomfichier'];
    }
     
    $rowset[] = $buffer;
    L'idée est: récupérer les séances (dans l'ordre) avec leurs fichiers joints, mettre le nom des fichiers en buffer avec les infos sur la séance qui va avec, à chaque changement de numéro de seance (et en fin de boule) on a la liste complète des fichiers joints donc on stoke le buffer ailleurs avant de le vider. À la fin, $rowset contient ce qu'aurait renvoyé la requête correspondante utiliant GROUP_CONCAT. Le code n'a pas été testé, à toi de l'adapter

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Par défaut
    merci je vais tester ça

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 5
    Par défaut
    Oui bon ben je crois que le plus optimal c'est quand meme de left join mes tables et de ne pas me soucier des répétitions des date et contenus s'il y a plus d'un fichier asoocié.
    Merci pour votre aide.
    J'ai pu bien progresser avec ce problème.

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

Discussions similaires

  1. Réponses: 62
    Dernier message: 16/04/2009, 10h09
  2. Réponses: 1
    Dernier message: 31/03/2009, 22h59
  3. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  4. Réponses: 3
    Dernier message: 11/04/2007, 14h01
  5. Joindre plusieurs tables pour en former qu'une seule.
    Par timeout dans le forum Requêtes
    Réponses: 7
    Dernier message: 19/09/2005, 09h18

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