Выводит те же строки, что и один раз в цикле php while

#php #mysql

#php #mysql

Вопрос:

У меня есть три столбца, которые имеют одинаковые значения для двух строк. Я хочу напечатать только одну из одной и той же строки из двух одинаковых строк, используя оператор цикла php while. Вот как данные

 ID   values
1     MINI
1     MINI
2     MINI
  

Я хочу напечатать все это, но только один раз с одинаковыми строками на основе идентификатора

  ID    Values
  1     MINI
  2     MINI
  

На самом деле я могу использовать DISTINCT ИЛИ GROUP BY в запросе mysql, чтобы найти ожидаемый ответ выше, но мне действительно нужно использовать оператор php while.

Это то, над чем я пробовал свои силы

 $query="SELECT * from table";
$sR=$db->query($query);

$array=array();

while($sRow=mysqli_fetch_assoc($sR)){
   $ID=$searchRow['ID'];
   $values=$searchRow['Values'];

   $array[$ID][]=$ID;   
   $array2[$ID][]=$values;  
}

foreach($array as $ID => $item){
    $value=$array[$ID];
    foreach($item as $newItem){
        if($newItem===$newItem){
           echo '---'.$newItem;
           break;
        }
    }
}
  

Это то, над чем я пытаюсь работать, но, похоже, это работает не так, как ожидалось, мне понадобится помощь в этом. Большое спасибо.

Ответ №1:

Когда я делаю подобные вещи, я использую переменную «Предыдущий идентификатор», в данном случае $ PRID, чтобы проверить, является ли идентификатор дубликатом. SQL-запрос должен быть упорядочен по идентификатору, чтобы это сработало.

 $query="SELECT * FROM table ORDER BY ID";
$sR=$db->query($query);

$array=array();

$PRID=0;
while($sRow=mysqli_fetch_assoc($sR)){
   $ID=$searchRow['ID'];
   $values=$searchRow['Values'];
   if($ID>$PRID){
      $array[$ID][]=$ID;   
      $array2[$ID][]=$values;  
   }
   $PRID=$ID;
}

foreach($array as $ID => $item){
    $value=$array[$ID];
    foreach($item as $newItem){
        if($newItem===$newItem){
           echo '---'.$newItem;
           break;
        }
    }
}
  

Ответ №2:

просто попробуйте вариант 1 или вариант 2

 $query="SELECT * FROM table ORDER BY ID";
$sR=$db->query($query);

$array = array();

// first option, expected output
// array(
//   0 => 'value',
//   1 => 'value'
// )
foreach($sR as $value) {
  $array[$value['ID']] = $value['Values'];
}

var_dump($array);

$array2 = array();
// second option
foreach($sR as $value) {
  $array2[$value['ID']] = array(
    'ID' => $value['ID'],
    'Value' => $value['Value']
  );
}

var_dump($array2);
// expected output
// array(
//  0 => array(
//    'ID' => 0,
//    'Value' => 'value'
//  ),
//  1 => array(
//    'ID' => 1,
//    'Value' => 'value'
//  )
// )