【问题标题】:messaging Conversation php消息对话 php
【发布时间】:2023-03-27 06:50:01
【问题描述】:

我在messages.php上创建了消息系统,我想明智地显示消息对话,应该显示最后一条消息,但不知道查询,因为我是php新手,这里是数据库信息

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

如果有人可以帮助我,请

 <?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";}
 ?>

【问题讨论】:

  • 所以你想有效地扭转谈话?
  • 我希望在messages.php上的对话中显示最后一条消息,并附上他的名字和消息

标签: php mysql chat messaging


【解决方案1】:

好的,您刚刚编辑了数据库信息。 所以现在我明白了你的数据库是怎样的。

你必须在chat2中添加一个DATETIME类型的“时间”列

SELECT * 

FROM `chat` 

WHERE `to`='$userid1' 

AND  

  `conversation_id`='$convo'    

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

如果你只想要最后一条消息,如果它是 MySQL 数据库,你可以添加

LIMIT 1

【讨论】:

  • 这只会获取向我发送消息的用户的名称,因为在 conversation_cat 表中只存储了会话 ID 和用户名...我想要表 2 聊天中的名称消息和时间表
  • 我编辑了我的答案。由于格式错误,我第一次不了解您的表格信息。
  • 它给出 mysql_fetch_array() 期望参数 1 是资源,布尔值在 C:\xampp\htdocs\twekr\messages.php 第 514 行给出
  • 您是否在聊天表中添加了“时间”列?
  • 所以你在这条线上有错误吗? $req4 = mysql_query("SELECT * FROM chat WHERE to='$userid1' AND conversation_id='$convo' ORDER BY time DESC");
【解决方案2】:

如果我正确理解了您的问题,您希望仅显示一条消息。即最新的?

如果是这样,请更改您的查询

SELECT * FROM `chat` ...

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

选择

【讨论】:

  • 根据我的问题,如果有 5 个不同的人给我发消息,那么应该在 messages.php 上显示 5 条消息......!但是如果一个人给我发了 7 次消息,那么他的最后一条消息应该显示在那个对话中
  • 我相信您的数据库定义需要更多的工作才能正确支持。您的第二个表应该将 id 和 conversation_id 的组合作为主键,然后该表中的“id”应该定义为引用第一个表的外键。请谷歌关于“关系数据库规范化”。如果你跳过它,你的数据库会及时搞砸,以后几乎不可能修复它。花大量时间来定义一个好的数据库是非常值得的。这将在以后为您节省大量的修复工作。
  • 例如注意“来自”列。看起来你在两个表中都有这个,这似乎是你应该删除的冗余。之后,您会发现使用 SQL 关键字“group by”和“join”来制定新查询要容易得多。
【解决方案3】:
<?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";}
 ?>

【讨论】:

  • order by id desc 给你最后一个 id。
  • 您的查询只给出一个对话列表,但在数据库中有两个
  • 现在这个查询给出了不同的 2 个用户消息的详细信息。
  • 这个列名是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多