Как напечатать сообщение только один раз за цикл? - PullRequest
0 голосов
/ 08 сентября 2018

У меня проблема с циклом 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

Как этого добиться? и заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018
<?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;
                }
        }
    }



?>  
0 голосов
/ 08 сентября 2018

Попробуйте этот запрос это будет групповой файл по коду

 $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

0 голосов
/ 08 сентября 2018

Самым простым решением было бы изменить ваш запрос на использование GROUP BY и выполнить GROUP CONCAT для FILE:

$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, вы устанавливаете $fetch = mysqli_fetch_array($q) перед циклом while, а затем ничего не делаете с ним, поэтому вы теряете одну строку значений. Попробуйте этот код вместо:

 $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>';
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...