如何在while循环中只打印一次帖子?
Posted
技术标签:
【中文标题】如何在while循环中只打印一次帖子?【英文标题】:How to print a post only one time in a while loop? 【发布时间】: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
如何做到这一点? 并提前感谢!
【问题讨论】:
好吧,如果你想在单行上输出,首先你需要不输出一个显式的换行符。 【参考方案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;
?>
【讨论】:
以上是关于如何在while循环中只打印一次帖子?的主要内容,如果未能解决你的问题,请参考以下文章