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 :

Système de messages privés et jointure [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Par défaut Système de messages privés et jointure
    Bonsoir, est bonne année

    J'ai un petit problème de jointure pour mon système de MP, j'ai suivit un tutoriel pour en créer un, mais il utilise qu'une seule table, est donc quand, on reçois un message, est qu'on répond, sa ne les mets pas à la suite. Ce que j'aimerais c'est que tout les messages, sont la suite, comme sur un forum.

    Voici mes tables :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `forum_mp` (
      `mp_id` int(11) NOT NULL auto_increment,
      `mp_titre` varchar(255) NOT NULL,
      `mp_createur` int(11) NOT NULL,
      `mp_expediteur` int(11) NOT NULL,
      `mp_receveur` int(11) NOT NULL,
      `mp_message` text NOT NULL,
      `mp_time` bigint(20) NOT NULL default '0',
      `mp_lu` enum('0','1') NOT NULL,
      `id_parent_mp` int(11) NOT NULL,
      KEY `mp_id` (`mp_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `forum_mp_reponse` (
      `mp_id` int(11) NOT NULL auto_increment,
      `mp_expediteur` int(11) NOT NULL,
      `mp_receveur` int(11) NOT NULL,
      `mp_text` text character set latin1 collate latin1_general_ci NOT NULL,
      `mp_time` int(11) NOT NULL,
      `mp_lu` enum('0','1') character set latin1 collate latin1_general_ci NOT NULL,
      `mp_id_parent` int(11) NOT NULL,
      PRIMARY KEY  (`mp_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

    Est voici ma requête :

    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
     
    <?php
    $retour = mysql_query('SELECT mp_id , mp_titre, mp_createur, mp_expediteur, mp_receveur, mp_message, mp_time, mp_lu, id_parent_mp,
    membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature,
    group_id, group_name, group_color, group_logo, group_rang
    FROM forum_mp
    LEFT JOIN forum_membres ON forum_membres.membre_id = forum_mp.mp_createur
    LEFT JOIN forum_groupes ON forum_groupes.group_rang = forum_membres.membre_rang
    WHERE id_parent_mp ="'.$id_mess.'"
    ORDER BY mp_id');
    while ($donnees = mysql_fetch_array($retour))
    {
    //etc...
    }
    ?>

    Donc, ce que j'aimerais, c'est de pouvoir mettre les messages de la table forum_mp_reponse
    à la suite des messages de la table forum_mp, j'ai tout essayer, mais rien ne marche.
    D'avance, merci.

  2. #2
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut
    Je dirai :
    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
    <?php
    $retour = mysql_query('SELECT *,
    (SELECT * FROM forum_membres WHERE forum_membres.membre_id = forum_mp.mp_createur), 
    (SELECT * FROM forum_groupes WHERE forum_groupes.group_rang = forum_membres.membre_rang), 
    FROM forum_mp 
    ORDER BY mp_id');
    while ($donnees = mysql_fetch_array($retour)){
    	$r2 = mysql_query('SELECT *,
    	(SELECT * FROM forum_membres WHERE forum_membres.membre_id = forum_mp.mp_createur), 
    	(SELECT * FROM forum_groupes WHERE forum_groupes.group_rang = forum_membres.membre_rang), 
    	FROM forum_mp_reponse 
    	WHERE id_parent_mp ="'.$donnees['id_mess'].'"
    	ORDER BY mp_id');
    	while ($donnees2 = mysql_fetch_array($r2)){
    		// Affichage
    	}
    }
    ?>

    Attention à la collision de tes champs qui portent le même nom dans différentes tables.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Par défaut
    Sa ne marche pas...

    PS : Je n'ai jamais vus une requête comme sa

  4. #4
    Membre confirmé
    Homme Profil pro
    Médecin.
    Inscrit en
    Septembre 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Médecin.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 96
    Par défaut
    Donc, ce que j'aimerais, c'est de pouvoir mettre les messages de la table forum_mp_reponse
    à la suite des messages de la table forum_mp, j'ai tout essayer, mais rien ne marche.
    D'avance, merci.
    Bonjour,
    Ma réponse va peut-être te paraitre simpliste mais j'ai peut être mal compris la question :
    Si tu veux mettre les messages de la table forum_mp_reponse
    à la suite des messages de la table forum_mp, il faut au mois que les 2 tables apparaissent dans ta requête.
    Je n'en vois qu'une ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Par défaut
    Oui, je sais, j'ai mis ma requête qui fonctionnait, mais que pour le premier message, c'est a dire à la création du MP. J'avais essayer de faire une jointure, en essayer de "jointer" les champs id_parent_mp entre elles, mais je ne suis pas arriver.

    J'ai donc poster ma requête pour qu'on puisse m'aider à finir de coder mon système.

  6. #6
    Membre chevronné Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Par défaut
    Euh oué je devais pas être bien réveillé !
    Je voulais faire une requête imbriquée mais en réfléchissant ça va pas aller.

    Je propose ça :
    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
    <?php
    $retour = mysql_query('SELECT mp_id , mp_titre, mp_createur, mp_expediteur, mp_receveur, mp_message, mp_time, mp_lu, id_parent_mp,
    membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature,
    group_id, group_name, group_color, group_logo, group_rang
    FROM forum_mp
    LEFT JOIN forum_membres ON forum_membres.membre_id = forum_mp.mp_createur
    LEFT JOIN forum_groupes ON forum_groupes.group_rang = forum_membres.membre_rang
    ORDER BY mp_id');
    while ($donnees = mysql_fetch_array($retour)){
    	$r2 = mysql_query('SELECT mp_id , mp_titre, mp_createur, mp_expediteur, mp_receveur, mp_message, mp_time, mp_lu, id_parent_mp,
    	membre_id, membre_pseudo, membre_inscrit, membre_avatar, membre_localisation, membre_post, membre_signature,
    	group_id, group_name, group_color, group_logo, group_rang
    	FROM forum_mp_reponse 
    	LEFT JOIN forum_membres ON forum_membres.membre_id = forum_mp.mp_createur
    	LEFT JOIN forum_groupes ON forum_groupes.group_rang = forum_membres.membre_rang
    	WHERE id_parent_mp ="'.$donnees['id_mess'].'"
    	ORDER BY mp_id');
    	while ($donnees2 = mysql_fetch_array($r2)){
    		// Affichage
    	}
    }
    ?>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 106
    Par défaut
    Bonjour, j'ai refait entièrement l'architecture de ma base de données pour mon système de MP. J'arrive maintenant, à afficher des messages à la suite, le seule problème que j'ai c'est que je ne c'est pas comment faire pour que les 2 participants (l'expéditeur & le receveur) peuvent voir le sujets. Pour l'instant, j'arrive à le faire voir que pour le receveur. Si vous pouviez m'aider.

    Table pour les sujets :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE `mp_sujets` (
      `mp_id` mediumint(8) NOT NULL auto_increment,
      `mp_titre` varchar(50) NOT NULL,
      PRIMARY KEY  (`mp_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


    Table pour les messages :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `mp_messages` (
      `mp_idmess` int(11) NOT NULL auto_increment,
      `mp_id_sujets` int(11) NOT NULL,
      `expediteur` int(11) NOT NULL,
      `receveur` int(11) NOT NULL,
      `message` text NOT NULL,
      `timestamp` bigint(20) NOT NULL default '0',
      `mp_lu` enum('0','1') NOT NULL,
      KEY `mp_idmess` (`mp_idmess`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

    Est ma requête, pour afficher les sujets :


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    default;
     
    echo'<h1 align="center">Mes messages : Accueil</h1>';
     
    $requete = mysql_query('SELECT mp_id_sujets, expediteur, receveur, message, timestamp, mp_lu, mp_titre, membre_id, membre_pseudo
    FROM mp_messages
    LEFT JOIN forum_membres ON mp_messages.expediteur = forum_membres.membre_id
    LEFT JOIN mp_sujets ON mp_sujets.mp_id = mp_messages.mp_id_sujets
    WHERE receveur = "'.intval($_SESSION['id']).'"')
    or die (mysql_error());

    Voila, merci d'avance.

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir, peut-être en le stipulant dans la requete comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE receveur = "'.intval($_SESSION['id']).'" OR expediteur = "'.intval($_SESSION['id']).'"

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

Discussions similaires

  1. Messages privés - jointures
    Par Sébastien L dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/01/2012, 00h25
  2. Réponses: 1
    Dernier message: 12/12/2005, 18h29
  3. Messages Privés : reste en boite d'envoi ? Pourquoi ?
    Par Perceval dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 20/09/2005, 17h52

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