Actualiser dates sans dates manquantes

Fermé
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022 - 8 juil. 2022 à 03:54
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 10 juil. 2022 à 21:00

Bonjour,

Je bloque sur une fonction, pas facile à expliquer.

J'ai un itinéraire avec une colonne date et une colonne le numero de la journée.

J'ai supprimé des jours entre d'autres et du coup j'ai des dates et numéros manquants.

J'ai un bouton en haut de chacune de ses deux colonnes avec lesquel je souhaite actuialiser la colonne date et numéro, afin de combler ces vide. 

Exemple:
j'ai dans ma colonne numero journée:
1
2
4
5
8
9

et je souhaite après appuyer sur le bouton avoir
1
2
3
4
5
6

J'étais parti sur une solution de boucle avec incrémentation +1 de numéro journée, avec en WHERE la date, mais si j'ai un vide entre deux dates, il me le rajoute dans les numéros journée.

Je recherche donc a incrémenter sans faire référence a l'autre colonne date, et en prenant le prochain numéro de cette mème colonne, mais je ne sais pas l'écrire.

Merci


Windows / Chrome 103.0.0.0

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 juil. 2022 à 06:52

Bonjour

Pourrais tu nous montrer la structure de ta table 

Ainsi que quelques données d'exemple avec ces "trous” puis les mêmes données souhaitées (sans trous) 


0
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022
8 juil. 2022 à 12:57

Bonjour,

Voici ma table: 'itineraire'
id / code1 / date / jour / hotel

et voici un exemple avec des vides:
id / code1 / date / jour / hotel
27 / MARTIN / 2022-11-12 / 1 / Bordeaux
28 / MARTIN / 2022-11-13 / 2 / Bordeaux
22 / MARTIN / 2022-11-14 / 3 / Bordeaux
31 / MARTIN / 2022-11-16 / 5 / Bordeaux
32 / MARTIN / 2022-11-17 / 6 / Bordeaux
33 / MARTIN / 2022-11-18 / 7 / Bordeaux

et ce que je souhaite obtenir:
id / code1 / date / jour / hôtel
27 / MARTIN / 2022-11-12 / 1 / Bordeaux
28 / MARTIN / 2022-11-13 / 2 / Bordeaux
22 / MARTIN / 2022-11-14 / 3 / Bordeaux
31 / MARTIN / 2022-11-15 / 4 / Bordeaux
32 / MARTIN / 2022-11-16 / 5 / Bordeaux
33 / MARTIN / 2022-11-17 / 6 / Bordeaux

l'id n'est pas nécessairement dans l'ordre chronologique, car je peux avoir supprimé ou rajouté des lignes au milieu de ma suite. Donc pas possible de le prendre en référence pour réaliser la fonction de suite de date ou de jour sans vide..

Ma seule référence est l'ordre de la colonne date ou jour.

Merci

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 8 juil. 2022 à 13:28

bonjour, peux-tu montrer un exemple plus complet?
faut-il simplement renuméroter la colonne "jour" dans toute la table, par ordre de "date", en commençant par 1?
et mettre à jour la colonne "jour", pour avoir chaque fois la date du jour suivant?

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
8 juil. 2022 à 13:33

Je partirais d'une requête qui présente les enregistrements par date.
Ensuite j'examinerais chaque enregistrement, et, si nécessaire, je le modifierais, avec en WHERE l'id.

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
Modifié le 8 juil. 2022 à 13:54

Donc:

  • select * from itineraire order by date
  • prendre la première date et le premier jour dans le premier enregistrement
  • une boucle pour parcourir tous les enregistrements suivants
  • pour chaque enregistrement, prendre son id, et UPDATE itineraire SET date= ..., jour = ... WHERE id = ...
0
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
9 juil. 2022 à 03:03

Oui c'et exactement ça, numéroter les jours dans l'ordre des dates, en commençant par 1, et sans sauter de numéro mème si ça c'et cas pour les dates. Car justement ensuite, je peux faire une boucle des dates en partant de la premiere avec un +1 day en me basant sur les numéros jours. 

Ou alors est-il possible aussi de faire de même pour les dates ? en partant de la première, faire un +1 day sans référence aux numéros jour ?

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
8 juil. 2022 à 13:29

bonjour,

peux-tu montrer le code PHP que tu as essayé, il suffit peut-être de légèrement l'adapter.

0
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022
9 juil. 2022 à 03:08

//////////////////// mise a jour date //////////////////////////////////////////


   $sqldatex = mysqli_query ($connect, "SELECT * FROM itineraires WHERE code1='$itineraire'  AND jour='1' ") or die(mysqli_error());
   $row_sqldatex = mysqli_fetch_assoc($sqldatex);
   
   $date1 = $row_sqldatex['date'];
   $jour = 1;
              
if(isset($_POST['maj_date'])) 
         {
          
          while ($jour < 25)
{
          $date1=strftime("%Y-%m-%d", strtotime("$date1 +1 day"));
          $jour = $jour +1;

          $majdate = "UPDATE itineraires SET date='$date1' WHERE code1='$itineraire' AND  jour='$jour'";
          
             // Exécution de la requête
          $enr=mysqli_query($connect, $majdate);
          
             // Contrôle sur la requête
   if(!$enr) {
    die('Erreur SQL !'.$majdate.'<br />'.mysqli_error());
   }
   else {
    echo "";
     
  }
  }
         }

//////////////////// mise a jour date //////////////////////////////////////////

//////////////////// mise a jour jour //////////////////////////////////////////


   $sqljourx = mysqli_query ($connect, "SELECT * FROM itineraires WHERE code1='$itineraire'  AND jour='1' ") or die(mysqli_error());
   $row_sqljourx = mysqli_fetch_assoc($sqljourx);
   
   $date1 = $row_sqljourx['date'];
   $jour = 1;
              
if(isset($_POST['maj_jour'])) 
         {
          
          while ($jour < 25)
{
          $date1=strftime("%Y-%m-%d", strtotime("$date1 +1 day"));
          $jour = $jour +1;

          $majjour = "UPDATE itineraires SET jour='$jour' WHERE code1='$itineraire' AND date='$date1'";
          
             // Exécution de la requête
          $enr=mysqli_query($connect, $majjour);
          
             // Contrôle sur la requête
   if(!$enr) {
    die('Erreur SQL !'.$majjour.'<br />'.mysqli_error());
   }
   else {
    echo "";
     
  }
  }
         }

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
9 juil. 2022 à 07:54

Ma suggestion, c'est d'utiliser la requête "select * from itineraire order by date", sans clause WHERE.
De récupérer la date du premier enregistrement.
Le cas échéant, de changer le jour du premier enregistrement, en faisant un "UPDATE ...  WHERE id = ...".
Ensuite, de faire une boucle en faisant à chaque fois mysqli_fetch_assoc pour traiter les enregistrements suivants.
Pour chacun des enregistrements suivants, faire un "UPDATE ...  WHERE id = ...".

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022
10 juil. 2022 à 14:43

Merci pour vos réponses.

Mais je coince toujours.

En fait je voudrais faire une incrémentation depuis une valeur donnée (dans l'exemple 10) avec un update en boucle, sur une colonne.
Exemple:

    10 => 1
    13 => 2
    17 => 3
    18 => 4

C'est simple avec des mots, mais pas si simple à mettre en place. En tout les cas moi je coince.

0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 juil. 2022 à 14:57

As-tu adapté ton code en fonction de mes suggestions?

0
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
10 juil. 2022 à 19:20

Oui. Mais je n'ai toujours pas le resultat souhaité.

   $sqljourx = mysqli_query ($connect, "SELECT * FROM itineraires WHERE code1='$codeitineraire' AND jour='1' ORDER BY date ASC") or die(mysqli_error());
   $row_sqljourx = mysqli_fetch_assoc($sqljourx);
   
   $ddate = $row_sqljourx['date'];
   $jjour = 0;
			  
if(isset($_POST['maj_jour'])) 
         {
		  
		  while ($row = mysqli_fetch_assoc($sqljourx)) 
{
		  $ddate=strftime("%Y-%m-%d", strtotime("$ddate +1 day"));
		  $jjour = $jjour +1;

          $majjour = "UPDATE itineraires SET jour='$jjour' WHERE code1='$codeitineraire' AND version='$version' ORDER BY '$ddate' ASC";
		  
		     // Exécution de la requête
          $enr=mysqli_query($connect, $majjour);
		  
		     // Contrôle sur la requête
   if(!$enr) {
    die('Erreur SQL !'.$majjour.'<br />'.mysqli_error());
   }
   else {
	echo "";
	 
  }
  }
         }
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022
10 juil. 2022 à 20:00

Merci de tenir compte de ceci quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Je crois que "AND jour='1'" est en trop dans la requête.

A quel endroit as-tu appliqué la suggestion "UPDATE ...  WHERE id = ..."?

0
gochile Messages postés 16 Date d'inscription jeudi 29 janvier 2015 Statut Membre Dernière intervention 10 juillet 2022
10 juil. 2022 à 20:14

Ok j'ai bien noté pour le langage code.
Je ne peux pas prendre l'id en référence car il n'est pas toujours dans un ordre chronologique.
J'ai plusieurs itinéraire dans ce tableau, différenciés par le code1.

Le jour=1, est pour partir du premier jour de l'itinéraire x. Puis rajouter 1 en suivant l'ordre des dates, même si il y a une date qui passe du 15/07 au 17/07.

Je ne sais pas l'écrire semble t-il et je ne comprends pas comment faire autrement.

-1
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 juil. 2022 à 21:00

L'ordre chronologique est respecté grâce au "ORDER BY date" de la requête.
Il est indispensable, ensuite, d'utiliser l'id dans l'UPDATE, sinon on ne met pas à jour le bon enregistrement, respectant l'ordre chronologique.
Il faut supprimer le "jour=1"  de la requête, sinon cela empêche de traiter tous les enregistrements du même itinéraire.

0