繁体   English   中英

PHP / MySQL每行的值不同

[英]PHP/MySQL different value for each row

我已经搜索过,并且尝试了许多不同的方法,但是我仍然无法提出任何想要的方法来工作。 我拥有的是直接消息系统,但是我想在用户名旁边显示(如果该消息大于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代码以及body标签中的更多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 这是错误的,因为在循环的那个迭代中没有得到特定于对话的行。

这个$yelp = mysql_fetch_array($query_name); $name_of_other_person = $yelp\\['name'\\]; $yelp = mysql_fetch_array($query_name); $name_of_other_person = $yelp\\['name'\\]; 看起来错了。

您需要像执行$ teg一样循环$ yelp。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM