2015-10-09 1 views
0

j'ai créé le système de messagerie, sur messages.php je veux montrer les messages conversation sage et le dernier message devrait être affiché mais ne sais pas la requête car je suis nouveau à php voici les informations de base de donnéesmessagerie Conversation php

table:conversation_chat   table2:chat 
conversation_id: primary unique id: primary unique 
from:        conversation_id: 
to:        from_user: 
time:        to_user: 
            message: 
            subject: 

S'il vous plaît si quelqu'un peut me aider dans ce

<?php 

    $req3 = mysql_query("SELECT * FROM `conversation_chat` WHERE 
    `user_to`='$userid1'"); 
$hy= mysql_fetch_array($req3); 

    $convo = $hy['conversation_id']; 

    if(mysql_num_rows($req3)!=0){ 

    $req4 = mysql_query("SELECT * FROM `chat` WHERE `to`='$userid1' AND 

    `conversation_id`='$convo'"); 
     while($dn1 = mysql_fetch_array($req4)) 
    { 
    ?> 

<td><img alt="example image" src="avatar.png"> &nbsp; &nbsp; <a 
href="read?id=<?php echo $dn1['id']; ?>"><?php echo 
htmlentities($dn1['from'], ENT_QUOTES, 'UTF-8'); ?></a></td> 



        <td><span class="label vd_bg-green append-icon"> 

<?php 
echo $dn1['subject']; ?></span></td> 
        <td style="width:80px" class="text-right"> 

<strong><?php echo timeAgo($dn1['time']); ?></strong></td><td 

style="width:80px" class="text-right"> 
<?php echo '<a 
href="mdelete.php?id='. $dn1['id'] .'">Delete</a>'; ?></td> 
       </tr> 
       <?php 
}}else{ echo "No new messages";} 
?> 
+0

Vous voulez inverser efficacement la conversation? – developius

+0

Je veux que le dernier message soit affiché dans cette conversation sur messages.php avec son nom et le message –

Répondre

1

Ok, vous venez de modifier vos informations de base de données. Alors maintenant, je comprends comment votre base de données est.

Vous devez ajouter une colonne "temps" avec le type DATETIME dans chat2"

SELECT * 

FROM `chat` 

WHERE `to`='$userid1' 

AND 

    `conversation_id`='$convo'  

ORDER BY time DESC //Change the order from last to older 

Si vous voulez que le dernier message, et si sa base de données MySQL, vous pouvez ajouter

LIMIT 1 
+0

cela ne récupérera que le nom de l'utilisateur qui m'a envoyé le message car dans la table conversation_cat seuls l'ID de conversation et le nom des utilisateurs sont stockés. ..je veux le message le nom et l'heure de la table de discussion table 2 –

+0

J'ai édité ma réponse. La première fois que je n'ai pas compris vos informations de table en raison d'un mauvais format. – ThinkTank

+0

il donne mysql_fetch_array() s'attend à ce que le paramètre 1 soit resource, booléen donné dans C: \ xampp \ htdocs \ twekr \ messages.php à la ligne 514 –

0

Si je comprends bien votre question, vous voulez afficher un et un seul message, à savoir le plus récent

Si cela est vrai, changez votre requête de

SELECT * FROM `chat` ... 

Pour

SELECT *, max(date) FROM `chat` ... 

Sélectionnez

+0

en fonction de ma question si 5 personnes diffèrent me message puis 5 messages devraient être affichés sur messages.php ...! mais si une personne m'envoie un message 7 fois, alors son dernier message devrait être montré sur cette converstaion –

+0

Je crois que votre définition de base de données exige plus de travail pour soutenir cela correctement. Votre deuxième table doit avoir la combinaison de id et conversation_id comme clé primaire, puis l'identifiant de cette table doit être défini comme une clé étrangère référençant la première table. S'il vous plaît google à propos de "normalisation de la base de données relationnelle". Si vous ignorez cela, votre base de données sera foiré dans le temps et il est presque impossible de la réparer plus tard. Il vaut vraiment la peine de consacrer beaucoup de temps à une bonne définition de base de données. Cela vous sauvera beaucoup, beaucoup d'efforts de fixation plus tard. –

+0

E.g. Faites attention à la colonne "de". Il semble que vous ayez cela dans les deux tableaux et cela semble être une redondance que vous devriez supprimer. Après cela, vous trouverez beaucoup plus facile de formuler de nouvelles requêtes en utilisant les mots-clés SQL "group by" et "join" pour obtenir ce que vous voulez. –

-1
<?php 

    $req3 = "SELECT DISTINCT conversation_id,column_name FROM `conversation_chat` WHERE 
    `user_to`='$userid1' ORDER BY conversation_id desc"; 
$query=mysql_query($req3); 
$num=mysql_num_rows($req3); 
$hy= mysql_fetch_array($req3); 

    $convo = $hy['conversation_id']; 

    if($num!=0){ 

    $req4 = mysql_query("SELECT DISTINCT id,column_name FROM `chat` WHERE `to`='$userid1' AND 

    `conversation_id`='$convo' ORDER BY id desc "); 
     while($dn1 = mysql_fetch_array($req4)) 
    { 
    ?> 

<td><img alt="example image" src="avatar.png"> &nbsp; &nbsp; <a 
href="read?id=<?php echo $dn1['id']; ?>"><?php echo 
htmlentities($dn1['from'], ENT_QUOTES, 'UTF-8'); ?></a></td> 



        <td><span class="label vd_bg-green append-icon"> 

<?php 
echo $dn1['subject']; ?></span></td> 
        <td style="width:80px" class="text-right"> 

<strong><?php echo timeAgo($dn1['time']); ?></strong></td><td 

style="width:80px" class="text-right"> 
<?php echo '<a 
href="mdelete.php?id='. $dn1['id'] .'">Delete</a>'; ?></td> 
       </tr> 
       <?php 
}}else{ echo "No new messages";} 
?> 
+0

ordre par id desc vous donner le dernier identifiant. –

+0

votre requête est ony donnant une liste de conversation mais dans la base de données il y a deux –

+0

maintenant cette requête donne des détails de message d'utilisateur différent-2. –