Eliminar los datos que se repiten en una columna

Actualmente estoy desarrollando un sistema de pedidos donde un cliente puede pedir muchos artículos. También tengo un administrador donde él / ella puede ver todos los pedidos ese día. El administrador puede ver el nombre del cliente, el total a pagar, los productos y la cantidad del producto que el cliente ha pedido.

Actualmente estoy viendo estos resultados utilizando mi consulta.

Name | Payable | Product | Quantity Test | 165 | keychain | 3 Test | 165 | Tumbler | 1 Miguel | 525 | Keychain | 3 Miguel | 525 | Magic Mug | 3 Dandel | 1010 | keychain | 3 Dandel | 1010 | T-shirt | 2 Dandel | 1010 | Keychain | 3 Dandel | 1010 | Mug | 5 

Esta es mi consulta.

  $result = mysql_query(" SELECT reservation.firstname, reservation.lastname, reservation.payable, reservation.city, orders.product, orders.qty, reservation.date FROM orders INNER JOIN reservation ON orders.confirmation = reservation.confirmation WHERE reservation.date = CURDATE() && reservation.city = '24th Floor' "); while($row = mysql_fetch_array($result)) { echo ''; echo ''.$row['firstname'].''; echo ''.$row['payable'].''; echo ''.$row['product'].''; echo ''.$row['qty'].''; echo ''; } 

Quiero obtener resultados como este. ¿Cómo puedo hacerlo?

  Name | Payable | Product | Quantity Test | 165 | keychain | 3 | | Tumbler | 1 Miguel | 525 | Keychain | 3 | | Magic Mug | 3 Dandel | 1010 | keychain | 3 | | T-shirt | 2 | | Keychain | 3 | | Mug | 5 

    Puede mantener un cierto estado mientras se realiza una iteración que realiza un seguimiento de si la fila actual tiene un nuevo nombre / pago:

     $last_name_seen = NULL; while ($row = mysql_fetch_array($result)) { $firstname = ""; $payable = ""; if ($last_name_seen === NULL || $row['firstname'] != $last_name_seen) { $last_name_seen = $row['firstname']; $firstname = $row['firstname']; $payable = $row['payable']; } echo ''; echo ''.$firstname.''; echo ''.$payable.''; echo ''.$row['product'].''; echo ''.$row['qty'].''; echo ''; } 

    Tenga en cuenta que su consulta de MySQL debe tener alguna cláusula ORDER BY , para generar el orden que desea, por ejemplo

     ORDER BY Name, Product; 

    Como lo sugieren los comentarios anteriores, si está utilizando una API PHP en desuso, debería considerar actualizar a algo más moderno. Pero, la lógica utilizada en el bucle anterior no cambiaría mucho con el cambio de la API de MySQL.

    Debe establecer el indicador para el nombre y la columna a pagar y usar array_column (), array_unique () para obtener valores de columna únicos:

     "Test","Payable"=>'165',"Product"=>"keychain","Quantity"=>3),array("Name"=>"Test","Payable"=>'165',"Product"=>"Tumbler","Quantity"=>1)); $name_arr = array_unique(array_column($result, 'Name')); $payable_arr = array_unique(array_column($result, 'Payable')); $name_flag = 0; $pay_flag = 0; echo ""; for($i=0;$i"; echo ""; echo ""; echo ""; echo ""; echo ""; } else { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } $name_flag++; $pay_flag++; } } } $name_flag=0; $pay_flag=0; } echo "
    ".$name_arr[$i]."".$payable_arr[$j]."".$list['Product']."".$list['Quantity']."
      ".$list['Product']."".$list['Quantity']."
    "; ?>