我正在显示与每个用户不同的消息状态。假设user1
向user2
发送消息,user1
的消息状态然后设置为read
,而user2
的消息设置为{{1} }} 默认情况下。它会在unread
点击邮件后更新。
因此,在这些情况下,user2
(来自收件箱)的邮件将采用灰色字体,表示邮件设置为user1
(因为read
是一个谁发送)。另一方面,user1
使用粗体字体表示邮件为user2
。
这是表格的第一个结构:
unread
此处的问题是,如果我将消息状态更新为message(messageid, fromid, toid, message, timestamp, status)
,则会影响另一方(read
)。因此,我添加了另一个列,其状态将与user2
和user1
:
user2
此处message(messageid, fromid, toid, message, timestamp, from_status, to_status)
适用于from_status
而fromid
适用于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
。我怎样才能完成这些工作?
答案 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
分组的邮件,这些邮件还会显示您从每个发件人处获得的最新会话。并且它在用户的两侧显示正确的消息状态。