显示消息状态:PHP / MySQL消息传递系统中的读取和未读(与其他用户不同)

时间:2016-06-25 02:59:02

标签: php mysql messaging

我正在显示与每个用户不同的消息状态。假设user1user2发送消息,user1的消息状态然后设置为read,而user2的消息设置为{{1} }} 默认情况下。它会在unread点击邮件后更新。

因此,在这些情况下,user2(来自收件箱)的邮件将采用灰色字体,表示邮件设置为user1(因为read是一个谁发送)。另一方面,user1使用粗体字体表示邮件为user2

这是表格的第一个结构:

unread

此处的问题是,如果我将消息状态更新为message(messageid, fromid, toid, message, timestamp, status) ,则会影响另一方(read)。因此,我添加了另一个列,其状态将与user2user1

区别开来
user2

此处message(messageid, fromid, toid, message, timestamp, from_status, to_status) 适用于from_statusfromid适用于to_status。但我遇到了如何使用这些值来显示状态的问题。

我在第一次尝试时使用的PHP代码是:

toid

(该查询从每个具有最新会话的用户处获取每个会话。)

这些代码适用于主要用户<?php $id = $_SESSION['id']; $query = mysql_query("SELECT m.* FROM message m LEFT JOIN message m2 ON ( (m.fromid=m2.fromid AND m.toid=m2.toid) OR (m.fromid=m2.toid AND m.toid=m2.fromid) ) AND m.timestamp<m2.timestamp WHERE (m.fromid='$id' OR m.toid='$id') AND m2.toid IS NULL ORDER BY timestamp DESC"); while ($message = mysql_fetch_array($query)) { if ($message['status'] === 'unread') { // bold font style will be applied } else { // gray-colored font will be applied } } ?> ,但影响另一方,后者认为从user1收到的邮件设置为user2或{{ 1}}。

所以,我在修改后的表上有什么问题,每个用户都有2个单独的read。我怎样才能完成这些工作?

2 个答案:

答案 0 :(得分:2)

@andrewsi评论相当不错,例如你有很多接收器。在你的情况下,它只是一个额外的字段,所以在我看来,只使用一个表不是溢出。 关于你的情况,你可以在一个简单的SQL中执行此操作:

public class PhotoUploadResponseHandler implements ResponseHandler<Object> {
String result = null;


@Override
public Object handleResponse(HttpResponse response)
        throws ClientProtocolException, IOException {

    HttpEntity r_entity = response.getEntity();
    String responseString = EntityUtils.toString(r_entity);


    try {
        JSONObject jsonObject = new JSONObject(responseString);
        Iterator<?> keys = jsonObject.keys();
        while (keys.hasNext()) {
            String flowid = (String) keys.next();
            String imageURL = (String) jsonObject.get(flowid);

        }

        }catch (JSONException e){

    }
    Log.d("imageuploadfile", responseString);

    return null;
}

在您的视图中,您只检查 read_status 字段

答案 1 :(得分:0)

(代表OP发表。)

由于@Rafal Mnich,我设法解决了这个问题。所以我抓住了他的一部分查询并进行了一些修改,它确实有效。

以下是查询:

SELECT m.msgid, m.fromid, m.toid, m.content,
  CASE
    WHEN m.fromid = '$id' THEN m.frommsgstatus
    WHEN m.toid = '$id' THEN m.tomsgstatus
  END AS msgstatus
FROM msg m
  LEFT JOIN msg m2
    ON ((m.fromid=m2.fromid AND m.toid=m2.toid) OR (m.fromid=m2.toid AND m.toid=m2.fromid)) AND m.timestamp<m2.timestamp
WHERE (m.fromid='$id' OR m.toid='$id') AND m2.toid IS NULL
ORDER BY m.timestamp DESC

这些显示由发件人fromid分组的邮件,这些邮件还会显示您从每个发件人处获得的最新会话。并且它在用户的两侧显示正确的消息状态。