8768 sujets

Développement web côté serveur, CMS

Hello les codasseurs & codasseuses Smiley smile

Je ne trouve pas comment venir à bout de mon problème, avec $i++ qui skip / zappe certains enregistrements : Ceux de fin.

Contexte : J'affiche 20 lignes issues de ma db. Le bouton "Afficher plus", charge les 20 lignes suivantes.


$i = $_POST['last_counter'];  // récupéré depuis le bouton "Afficher plus"

$in_here = str_repeat('?,', count($ids) - 1) . '?';
$sql = "SELECT A.*,  P.pays FROM animaux A   
	     LEFT JOIN pays P ON p. t_id = A. t_id 
	     WHERE  A.zone IN ($in_here )
	     GROUP BY (case when NULLIF(zz, '') IS NOT NULL then zz else zone end)
	     $order_by   LIMIT 0, 20 ";
if (! $stmt = $pdo->prepare($sql)) {die(var_export($pdo->errorinfo(), TRUE));}  
$stmt->execute($ids);						 
while ($row = $stmt -> fetch(PDO::FETCH_ASSOC))
	  { 	.......		 
		 $i++;
          }


Au lieu que les nouvelles lignes chargées commencent par $i = 21, elles commencent à $i =22, et terminent à $i =40. Il me manque le dernier enregistrement de la séquence requise, et non pas le premier.

Puis lorsque je clique à nouveau sur "Afficher plus",
les nouvelles lignes comment à $i = 44, et terminent à $i = 60;
Là idem, il me manque les 4 derniers enregistrements de la séquence...

Je reclique, et $i de départ = 63, et $i de fin = 80.
Là idem, il me manque les 3 derniers enregistrements de la séquence...

$_POST['last_counter']; m'indique à chaque fois les bonnes valeurs, pas de soucis à ce niveau.
Comment solutionner ce problème ? A quoi est-ce du ?

Merci beaucoup, A vous lire,
Modifié par Vape6 (22 Apr 2022 - 16:26)
D'habitude, j'explique toujours comment j'ai résolu le problème, mais là je m'abstiendrais car trop long à expliquer, vu mes multiples conditions et centaines de lignes de code impliquées.
Le GROUP BY CASE n'avait rien à avoir dans l'histoire.

Bon, j'ai enfin trouvé comment parvenir à toutes mes fins, jusqu'ici.