Salut,
MySQL va bêtement retourner ce que tu lui demandes. Pour chaque enregistrement, il va forcément retourner... tout... ville, département, etc. Logique, quoi.
C'est à toi de faire en sorte de ne pas répéter la ville et le département.
Pour cela, il te suffit de comparer la nouvelle valeur à l'ancienne. Si elle est différente, tu l'affiches. Sinon, tu passes à la suite.
Procédure à suivre :
1/ Initialiser au début du script une variable pour le département, une autre pour la ville. Par exemple :
$ville = '';
$dep = '';
2/ Récupérer le premier enregistrement (dans ta boucle while)
3/ Comparer la valeur du champ département avec $dep :
<?php
if ($row['depart'] != $dep) {
echo '<p class="Stock">' . $row['depart'] . '</span></p>'
$depart = $row['depart'];
}
?>
Idem pour la ville.
Note que dans le bloc if, si on a changé de département, on stocke dans la variable $dep la nouvelle valeur. Prochain enregistrement : si le département est le même, on n'affiche pas son nom, on affiche la suite. Dès qu'un enregistrement aura un autre département, celui-ci sera affiché et stocké dans la variable $dep.
Voilà pour le principe.
Sinon, ton code mériterait que tu sépares davantage le traitement des données de leur affichage.
Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...