我已经搜索过,并且尝试了许多不同的方法,但是我仍然无法提出任何想要的方法来工作。我拥有的是直接消息系统,但是我想在用户名旁边显示如果该人大于0,则他们从该人那里收到了多少新消息。我尝试的所有操作仅显示了所有对话的一个值。在我的数据库中,有一列是接收消息的用户是否阅读了该消息(如果有的话),则将“否”变成“是”,否则显示“否”。

在此先感谢您的帮助!

编辑:
对于我的数据库来说,......在对话中只有第一条消息同时具有to_idfrom_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中。这是错误的,因为在循环的那个迭代中没有得到特定于对话的行。

10-08 07:21
查看更多