加载较早的会话消息 [英] Load earlier msg of conversation

查看:76
本文介绍了加载较早的会话消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我正在做一个聊天应用程序.当用户滚动到顶部时,我想要的是一个显示历史记录/显示更多按钮,当我单击该按钮时,应该成批加载较早的消息.由于多个用户可以聊天,因此我在存储获取的味精的最后一个ID时遇到问题.这是我的概念

Hello I am making a chat application. What I want when the user scrolls to the top a show history/show more button appears and when I click on it should load earlier messages but in batches. Since, multiple users can chat I am facing problem in storing the last id of the fetched msg. Here is my concept

当用户单击在线用户时,将从数据库中加载前10个消息.当用户滚动到顶部时,将显示更多按钮.如果他单击该按钮,则使用上次获取的行的ID,我再次获取小于前一个ID的下10行.但是由于有多个用户,因此我需要存储不同的ID.我应该怎么做.这是我的jquery和php代码.

When a user clicks on a online user, then first 10 msgs are loaded from the database. When users scrolls to the top show more button appears. If he clicks that button then using the id of last fetched row I am again fetching next 10 rows which are less than previous id. But since there are multiple users I need to store different ids. How should I do that. Here is my jquery and php code.

$('#m-'+id).scroll(function() {

                    var pos = $('#m-'+id).scrollTop();
                    if (pos == 0) {
                        $("#h2-"+id).after("<div id = 'showmore-"+id+"'>Show More</div>");
                    }
                    else{
                        $("#showmore-"+id).hide();
                    }

                    $("#showmore-"+id).click(function(){
                            $.ajax({

                            url: "loadmessage.php",
                            type: "POST",
                            data:{
                                'sender': sender,
                                'receiver': receiver,
                            },
                            //SELECT * FROM `messagse` WHERE ((sender_id = 1 AND receiver_id = 2) OR (sender_id = 1 AND receiver_id = 2)) AND (id < 36) order by id desc LIMIT 20
                            success: function(response){
                                var result = JSON.parse(response);
                                console.log("Result is " +result);
                                //result.sort();

                                for(var i = result.length-1; i >=0; i--){
                                    $("#m-"+id).prepend('<p class = "shout_msg">' +result[i]+ '</p>');
                                }
                            }
                        });
                    })
                });

PHP代码

<?php

if(isset($_REQUEST['sender']) AND isset($_REQUEST['receiver']) ){

    $sender = $_REQUEST['sender'];
    $receiver = $_REQUEST['receiver'];

        require_once 'dc_chat.php';
        $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        $result = $mysqli -> query("SELECT id from users where username LIKE '{$sender}'");
        $row = mysqli_fetch_row($result); 
        $sender_id = $row[0]; 

        $result = $mysqli -> query("SELECT id from users where username LIKE '{$receiver}'");
        $row = mysqli_fetch_row($result); 
        $receiver_id = $row[0]; 


        $sql = $mysqli -> query("SELECT username from users where id in (select sender_id from messagse where sender_id = $sender_id )");

        $row = mysqli_fetch_row($sql); 
        $name = $row[0];    


        //$sql = $mysqli -> query("SELECT * from messagse where (sender_id = $sender_id AND receiver_id = $receiver_id) OR (sender_id = $receiver_id AND receiver_id = $sender_id) ");  

        $sql = $mysqli -> query("SELECT * FROM `messagse` WHERE (sender_id = $sender_id AND receiver_id = $receiver_id) OR (sender_id = $receiver_id AND receiver_id = $sender_id) order by id desc LIMIT 5");  

            $arr = array();
              while($row = mysqli_fetch_array($sql)) {
                                $arr[] = $name." ". $row[3]." ".$row[4];
                            }
                echo json_encode($arr);
        }
    ?>

推荐答案

但是由于有多个用户,因此我需要存储不同的ID.我该怎么做.

But since there are multiple users I need to store different ids. How should I do that.

您应该根据要检索其过去消息的用户的ID来进行排序,而不是按照表的ID来进行排序.这样,您可以将其限制为所需的数量,例如LIMIT5.然后,您可以LIMIT 5,5等.

Rather than order by the id of the table you should order by the id of the user you are retrieving past messages for. That way you can limit it to the number you want, e.g. LIMIT 5. Then after that you can LIMIT 5,5 etc.

这篇关于加载较早的会话消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆