我已经搜索过,并且尝试了许多不同的方法,但是我仍然无法提出任何想要的方法来工作。我拥有的是直接消息系统,但是我想在用户名旁边显示如果该人大于0,则他们从该人那里收到了多少新消息。我尝试的所有操作仅显示了所有对话的一个值。在我的数据库中,有一列是接收消息的用户是否阅读了该消息(如果有的话),则将“否”变成“是”,否则显示“否”。
在此先感谢您的帮助!
编辑:
对于我的数据库来说,......在对话中只有第一条消息同时具有to_id
和from_id
,之后在对话中所有其他消息仅具有from_id
。因此,我要尝试计算的是from_id
不是您的user_id
的数量,因此是未登录用户user_id。如果这样的话。
这是我访问数据库的代码:
//获取对话
$get_conversations = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, dm.user2read, u.name, u.user_id" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'];
" GROUP BY dm.convo_id" .
" LIMIT 1";
// Run the conversation query
$convo_result = mysql_query($get_conversations);
然后是一些HTML代码
身体标签中还有更多php
<?php
while ($teg = mysql_fetch_array($convo_result)) {
if($teg) {
$to_id2 = $teg['to_id'];
$from_id2 = $teg['from_id'];
if($from_id2 == $_SESSION['user_id']) {
$id_of_other_person = $to_id2;
} else if($from_id2 != $_SESSION['user_id']) {
$id_of_other_person = $from_id2;
}
// Get the name of the other person
$get_other_name = "SELECT name FROM users WHERE user_id = " . $id_of_other_person;
// Run the query on the other person's name
$query_name = mysql_query($get_other_name);
if($query_name) {
$yelp = mysql_fetch_array($query_name);
$name_of_other_person = $yelp['name'];
}
$get_user2read = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, dm.user2read, u.name, u.user_id" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'];
" AND user2read = 'no'" .
" GROUP BY dm.convo_id" .
" LIMIT 1";
$query_user2read = mysql_query($get_user2read);
$alg = mysql_fetch_array($query_user2read);
?>
<?php if(COUNT($alg['user2read']) > 0 && $alg['user2read'] == 'no') : ?>
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
<?php else : ?>
<?php endif; ?>
<?php
}
}
?>
我会在我的direct_messages表的图像中发布,但是我没有足够的声誉...
这是我的桌子的示意图:
Field Type Collation Attributes Null Default Extra Action
convo_id bigint(20) No
message_id int(11) No
to_id int(11) No
from_id int(11) No
message varchar(5000) latin1_swedish_ci No
timestamp timestamp No CURRENT_TIMESTAMP
user1read varchar(3) latin1_swedish_ci No
user2read varchar(3) latin1_swedish_ci No
编辑:我消除了反斜杠
最佳答案
这是不正确的:
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
count()
用于数组,但是$teg
的元素只是表中的列值。如果要计算按列分组的记录,则需要在查询中使用MySQL COUNT()
函数。或者在这种情况下,由于您只想计算符合特定条件的邮件,请使用SUM()
:$get_conversations = "SELECT dm.convo_id, dm.message_id, dm.to_id, dm.from_id, u.name, u.user_id, SUM(dm.user2read = 'no') unread_count" .
" FROM users u" .
" JOIN direct_messages dm" .
" ON dm.from_id = u.user_id" .
" OR dm.to_id = u.user_id" .
" WHERE u.user_id = " . $_SESSION['user_id'] .
" AND dm.user2read = 'no' " .
" GROUP BY dm.convo_id" .
" LIMIT 1";
然后,您可以使用
$teg['unread_count']
获取该会话中未读邮件的数量。我认为您不需要内部查询
$get_user2read
。现在所有信息都在$get_conversations
中。这是错误的,因为在循环的那个迭代中没有得到特定于对话的行。