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

Langage PHP Discussion :

Trier une conversation [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 51
    Points
    51
    Par défaut Trier une conversation
    Bonjour,

    J'ai un système de boîte de réception, dans celui-ci se trouvent des conversations et dans ces conversations se trouvent des messages.

    Il y a une table "conversations" et une table "message", dans chacune de ces tables se trouve un id unique permettant de relier la conversation aux messages.

    Lorsqu'il y a un nouveau message, le champs "status" de la table "message" est à 0.
    Lorque le receveur clique sur la conversation pour la lire, "status" s'update à 1.

    Dans la boîte de réception, je souhaiterai afficher seulement les conversations et non tous les messages que les conversations contiennent.

    Donc pour cela j'ai fais cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u.nickname, u.firstname, u.lastname, u.main_photo,
    	   c.id_swap, c.object, c.date, c.receiver, c.sender, c.nb_person, c.answer, c.status, m.status_message, m.id_swap_message, m.receiver_message, m.sender_message
    FROM users AS u
    INNER JOIN conversation AS c ON u.nickname = c.sender
    AND c.receiver = "' . $data_my_select['nickname'] . '"
    OR u.nickname = c.receiver AND c.sender = "' . $data_my_select['nickname'] . '"
    LEFT JOIN messages AS m ON c.id_swap = m.id_swap_message AND c.receiver_message = "' . $data_my_select['nickname'] . '"
    GROUP BY c.id;
    Donc, là seulement les conversations s'affichent, le problème étant que lorsqu'un nouveau message apparait, je ne peux l'afficher sachant que les messages sont groupés.

    Avez-vous une solution ?

    Au plaisir de vous lire.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 51
    Points
    51
    Par défaut
    Bonsoir,

    Donc il y a de l'avancement, j'arrive à afficher que tel conversation contient un nouveau message, le souci est moindre, mais je n'arrive pas à le résoudre.

    Si on a un nouveau message dans deux conversations, dans la boîte de réception ça grise qu'une seule conversation.
    Une fois le nouveau message lu de cette conversation, ça grise la deuxième conversation où il y a un nouveau message mais jamais plus d'un en même temps.

    Le LEFT JOIN de la requête du coup est comme ceci maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN swaps_messages AS sw ON swaps.id_swap = sw.id_swap_message AND sw.receiver_message = "' . $data_my_select['nickname'] . '" AND "' . $data['id'] . '" = sw.id
    $data['id'] est créé à partir de cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT sw.id FROM users AS u, swaps_messages AS sw WHERE sw.status_message = 0 AND u.nickname = sw.sender_message';
    Donc là ça affiche les conversation ayant des nouveaux messages un par un, comment faire pour dire en gros que chaque $data['id'] qui sont égal à sw.id soit grisé ?

    Au plaisir de vous lire.

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,
    Citation Envoyé par Spire_ Voir le message
    Donc là ça affiche les conversation ayant des nouveaux messages un par un, comment faire pour dire en gros que chaque $data['id'] qui sont égal à sw.id soit grisé ?
    Tu peux le faire en PHP : tu as d'un côté les $data['id'] d'un côté et tu peux très bien faire une extraction des sw.id. Au moment du rendu tu fais un simple in_array() et si ça renvoie true, tu grises

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 91
    Points : 51
    Points
    51
    Par défaut
    Du coup j'ai fais autrement,

    Merci.

    Problème résolu.

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

Discussions similaires

  1. [RegEx] Trier une conversation dans un array
    Par shonan dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2011, 16h47
  2. Comment trier une DBGRID en cliquant sur une colonne
    Par sessime dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/10/2004, 16h18
  3. [langage] Trier une hastable
    Par Gogoye dans le forum Langage
    Réponses: 11
    Dernier message: 03/08/2004, 16h43
  4. Réponses: 2
    Dernier message: 21/06/2004, 15h55
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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