【问题标题】:How to print a post only one time in a while loop?如何在while循环中只打印一次帖子?
【发布时间】:2019-02-13 09:45:52
【问题描述】:

我的 while 循环有问题。所以我有这个代码可以插入提要和具有特定随机代码的多个文件。 例如我有这个表名为'feed'

ID  | FEED      | FILE          | CODE
---------------------------------------
1   |Test post  |uploads/1.jpg  | 54231
2   |Test post  |uploads/2.jpg  | 54231
3   |Test post  |uploads/3.jpg  | 54231
4   |Test post  |uploads/4.jpg  | 54231

如果代码重复,我只需要在 while 循环中打印一次提要。这是我的代码:

<?php
	 $connect = mysqli_connect("localhost","root","","test");

	 // Check connection
	 if (mysqli_connect_errno())
	   {
	   echo "Failed to connect to MySQL: " . mysqli_connect_error();
	   }
	 $q = mysqli_query($connect,"SELECT * FROM feed");
	 $fetch = mysqli_fetch_array($q);
	 while($fetch = mysqli_fetch_array($q)) {
		
	echo '<div class="post">'.$fetch['feed'].$fetch['file].'</div><br>';
	
	 }
     ?>	
     

以上代码输出:

Test postuploads/1.jpg
Test postuploads/2.jpg
Test postuploads/3.jpg
Test postuploads/4.jpg

我需要这样的东西:

Test post uploads/1.jpg / uploads/2.jpg/ uploads/3.jpg/ uploads/4.jpg

如何做到这一点? 并提前感谢!

【问题讨论】:

  • 好吧,如果你想在单行上输出,首先你需要输出一个显式的换行符。

标签: php mysql loops while-loop


【解决方案1】:

最简单的解决方案是将您的查询更改为使用GROUP BY 并在FILE 上执行GROUP CONCAT

$q = mysqli_query($connect,"SELECT FEED, GROUP_CONCAT(FILE) AS file, CODE FROM feed GROUP BY CODE");

这将为您的输出中的每个 CODE 值提供一行,如下所示:

FEED        FILE                                                         CODE
Test post   uploads/1.jpg, uploads/2.jpg, uploads/3.jpg, uploads/4.jpg   54231

如果您想要, 以外的分隔符,例如/,把GROUP_CONCAT改成

GROUP_CONCAT(FILE SEPARATOR '/')

Demo on Rextester

更新

PHP 代码中还有一个错误,您在 while 循环之前设置了$fetch = mysqli_fetch_array($q),然后没有对其进行任何操作,因此您丢失了一行值。试试这个代码:

 $q = mysqli_query( $connect, "SELECT FEED AS feed, GROUP_CONCAT(FILE) AS file, CODE FROM feed GROUP BY CODE" );
 while ( $fetch = mysqli_fetch_array( $q ) ) {
    echo '<div class="post">' . $fetch[ 'feed' ] . $fetch[ 'file' ] . '</div><br>';
 }

【讨论】:

  • 嗨 Ridan,抱歉我已经编辑了查询,因此文件列表将被称为 file
  • 嗨 Ridan,也许该代码只有一个文件?这是一个包含您的示例数据的工作演示 rextester.com/EHVC68392
  • 你能把整个php脚本发给我吗?
  • 嗨 Ridan,PHP 代码有帮助吗?如果没有,您能否提供更多信息来帮助回答问题?
【解决方案2】:

试试这个查询 这将是按代码分组文件

 $q = mysqli_query($connect,"SELECT GROUP_CONCAT(file, ' ') AS files,* FROM feed GROUP BY code");
 $fetch = mysqli_fetch_array($q);
 while($fetch = mysqli_fetch_array($q)) {

 echo '<div class="post">'.$fetch['feed'].' '.$fetch['files'].'</div><br>';

 }
 ?> 

有关 Group_concat 的更多信息,请参阅此处GROUP_CONCAT comma separator - MySQL

【讨论】:

    【解决方案3】:
    <?php
    $connect = mysqli_connect("localhost","root","","test");
    
    
    if (mysqli_connect_errno())
            {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }
    $q = mysqli_query($connect,"SELECT * FROM feed");                                                    
    $fetch1 = mysqli_fetch_all($q);
    $fetch2=$fetch1;
    
    
    $fn1= count($fetch1);
    $fn2=count($fetch2);
    
    for($i=0;$i<$fn1;$i++)
        {        
            for($j=0;$j<$fn2;$j++)
    
            {
                if( $fetch1[$i][3] == $fetch2[$j][3])
                    {
                        echo "duplicat";
                       echo "<div class='post'>";
                             print($fetch1[$i][1]);   print($fetch1[$i][2]); 
                        echo  "</div><br>";  
    
                        break 2;
                    }
            }
        }
    
    
    
    ?>  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2015-06-05
      • 2023-04-02
      相关资源
      最近更新 更多