Sie können während der Iteration einen Zustand beibehalten, der verfolgt, ob die aktuelle Zeile ein neuer Name/eine neue Zahl ist:
$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 '<tr>';
echo '<td style="border: 1px solid black;">'.$firstname.'</td>';
echo '<td>'.$payable.'</td>';
echo '<td>'.$row['product'].'</td>';
echo '<td>'.$row['qty'].'</td>';
echo '</tr>';
}
Beachten Sie, dass Ihre MySQL-Abfrage etwas ORDER BY
enthalten sollte -Klausel, um die gewünschte Reihenfolge zu generieren, z. B.
ORDER BY Name, Product;
Wie die obigen Kommentare auch nahelegen, sollten Sie, wenn Sie eine veraltete PHP-API verwenden, ein Upgrade auf etwas Moderneres in Betracht ziehen. Aber die in der obigen Schleife verwendete Logik würde sich durch eine Änderung der MySQL-API nicht wesentlich ändern.