Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 在while循环中只回显一次mysql数据_Php_Mysql_While Loop - Fatal编程技术网

Php 在while循环中只回显一次mysql数据

Php 在while循环中只回显一次mysql数据,php,mysql,while-loop,Php,Mysql,While Loop,我已经成功地进行了一次php聊天,每条消息都会在我的数据库表中获得一行,当然,用户_from列会多次相同。现在,我想回显向登录用户发送或从登录用户发送的最新消息。我只能通过使用此代码来回显每条消息 <?php $select = mysql_query("SELECT * FROM privat_mess WHERE userid_to='$idn' OR userid='$idn' ORDER BY identitet DESC"); while($row =

我已经成功地进行了一次php聊天,每条消息都会在我的数据库表中获得一行,当然,用户_from列会多次相同。现在,我想回显向登录用户发送或从登录用户发送的最新消息。我只能通过使用此代码来回显每条消息

 <?php

  $select = mysql_query("SELECT * FROM privat_mess WHERE userid_to='$idn' OR      
  userid='$idn' ORDER BY identitet DESC");

 while($row = mysql_fetch_assoc($select)){
     $id = $row['identitet'];
     $userid = $row['userid'];
     $userid_to = $row['userid_to'];
     $user_from = $row['user_from'];
     $user_to = $row['user_to'];
     $msg_body = $row['msg_body'];
     $opened = $row['opened'];


    if($userid == $idn) {
    echo '<div class>
        <p><strong>'.$user_to.'</strong></p>
            '.$msg_body.'
    </div>';
    }
else{
        echo '<div>
        <p><strong>'.$user_from.'</strong></p>
          '.$msg_body.'

    </div>';
}

}

?>
我想显示每次聊天的最新消息

通过一次聊天,我的意思是$userid和$user_是唯一的。如果同一个用户发送了更多的消息,我不希望它们也显示出来

$select = mysql_query("SELECT * FROM privat_mess WHERE userid_to='$idn' OR      
                       userid='$idn' ORDER BY identitet DESC limit 0,1");
只会给你一张唱片,第一张。我建议你们读一两分钟,因为它可以大大加快你们的查询速度

编辑:

好吧,如果你只想要一个解决方案,而不是一个花哨的解决方案,那我下班回家时就觉得我离开了我的大脑,只需拿出你想要的识别码,然后重新询问其中的每一个:

SELECT 
      max(identitet), userid_from
FROM 
     privat_mess 
WHERE
     userid_to='$idn' OR userid='$idn'
GROUP BY userid_from
每次聊天你都会得到最新的识别码,你可以在每次聊天中循环以获取更多信息

如果您想从一开始就通过sql解决这个问题,我有另一种方法,但它并不漂亮不要在大型数据库上使用它

 SELECT * 
 FROM privat_mess 
 WHERE (userid_to='$idn' OR userid='$idn') AND 
 identitet IN (SELECT max(identitet) 
               FROM privat_mess
               WHERE userid_to='$idn' OR userid='$idn' 
               GROUP BY userid_from)
从你的评论,但我想从每个用户一个消息,而不是一个消息的总数

试试这个:

SELECT 
     * 
FROM 
     privat_mess 
WHERE 
     userid_to='$idn' 
OR      
     userid='$idn' 
GROUP BY 
     userid
ORDER BY 
     identitet DESC

利用休息;一旦你想退出循环注意:你正在使用的mysql_*函数已经被弃用,并将在未来的PHP版本中被删除。不要使用它们编写新代码,而是使用mysqli_*或PDO。只需在查询中添加限制1,结果只会得到1行。好的,谢谢,我会记住Gerald。JiFus,我已经试过了,但是我总共只收到一条信息,我想从每个聊天室收到一条信息我想从每个聊天室收到一条信息你这是什么意思?请向我们显示您的表结构是的,但我希望每个用户发送一条消息,而不是总共发送一条消息。无论如何,谢谢你:好吧,从你的第一篇文章中看不到这一点!附言:为什么要投否决票?我没有对原始问题给出错误的答案:/不起作用,我想如果我能在表格中创建一列,给聊天室一个ID,我可能可以让它起作用。但我不确定我是否能做到。我已经发布了解决方案,但我知道有更好的方法。我似乎太累了,无法给你这些:/@user3910137那么你需要提供更多细节。告诉我桌子的结构和你想要的结果。编辑您的问题以添加更多详细信息请查看文章底部的编辑部分,您还需要知道什么吗?
SELECT 
     * 
FROM 
     privat_mess 
WHERE 
     userid_to='$idn' 
OR      
     userid='$idn' 
GROUP BY 
     userid
ORDER BY 
     identitet DESC