Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL每行的值不同_Php_Mysql - Fatal编程技术网

PHP/MySQL每行的值不同

PHP/MySQL每行的值不同,php,mysql,Php,Mysql,我搜索过,尝试过很多不同的方法,但都没有找到我想要的方法。我拥有的是一个直接消息系统,但我想在用户名旁边显示他们从该用户那里收到了多少新消息(如果超过0)。我尝试过的每件事都显示了所有对话的一个价值。在我的数据库中,我有一个列,如果收到消息的用户阅读了它,如果他们有消息,则将“否”变为“是”,否则显示“否” 提前感谢您的帮助 编辑: 我的数据库有一件事…只有对话中的第一条消息同时具有到\u id和来自\u id之后,对话中的所有其他消息都只有来自\u id。所以我要做的是计算有多少from\u

我搜索过,尝试过很多不同的方法,但都没有找到我想要的方法。我拥有的是一个直接消息系统,但我想在用户名旁边显示他们从该用户那里收到了多少新消息(如果超过0)。我尝试过的每件事都显示了所有对话的一个价值。在我的数据库中,我有一个列,如果收到消息的用户阅读了它,如果他们有消息,则将“否”变为“是”,否则显示“否”

提前感谢您的帮助

编辑: 我的数据库有一件事…只有对话中的第一条消息同时具有
到\u id
来自\u id
之后,对话中的所有其他消息都只有
来自\u id
。所以我要做的是计算有多少
from\u id
不是您的
user\u id
,所以是未登录的user\u 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

}

}
?>
编辑:我删除了这个
$yelp=mysql\u fetch\u数组($query\u name);
$name\u of_other\u person=$yelp\['name'\]
看起来不对

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

这是不正确的:

<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
然后您可以使用
$teg['unread\u count']
获取该对话中未读邮件的计数


我认为您不需要内部查询
$get\u user2read
。所有信息现在都在
$get\u conversations
中。这是错误的,因为它没有在循环的迭代中获得特定于对话的行。

旁注:没有提到
session_start()任何地方。您正在使用它,对吗?;-)如果没有,那么您必须将其包含在所有页面中。再加上这个和其他类似的
($alg\['user2read'\])
您放置反斜杠的方式,我觉得这不正确。如果您试图转义引号,则需要执行
\'
是的,我正在使用session\u start();我没有在代码中加反斜杠,它是在我粘贴代码时粘贴的,出于一些奇怪的原因。我编辑并删除了反斜杠。为什么您有
限制1
,但在结果上有
循环?是否要返回所有用户的对话?我有
限制1
的查询不在
while
循环中。我有第一个
SELECT
语句来获取对话,然后我使用第二个语句来获取新邮件的数量,其中
user2read='no'
对我有效,我可以获取发件人的姓名,我遇到的问题是,我无法获取每个会话有多少条新消息这就是我使用的
来获取新消息的数量,但它只显示每个消息的相同数量。当我用这个会话替换$get\u会话时,我收到一个内部服务器错误,我不知道我做错了什么好的,这帮了我的忙。我现在的问题是,它只显示了一次对话。你看到我上面的评论了吗?如果你想要不止一个对话,为什么要说
LIMIT 1
?是的,我去掉了
LIMIT 1
,现在我有三个对话,都是两条新消息。我想知道你为什么在查询中返回像
dm.message\u id
这样的字段。因为您只是为每个对话返回一行,所以这将从对话中随机选取一个消息ID。重点是什么?
<h3>You have <?php echo COUNT($teg['user2read']); ?> new messages - from <a href="#"><?php echo $name_of_other_person; ?></a></h3>
$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";