如何在一段时间循环中只打印一次帖子?



我对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

如何实现这一点? 提前感谢!

最简单的解决方案是将查询更改为使用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 '/')

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>';
}

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

$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逗号分隔符 - MySQL

<?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;
}
}
}

?>  

最新更新