Actualiser dates sans dates manquantes
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
- Actualiser dates sans dates manquantes
- Nombre de jours entre deux dates excel - Guide
- Comment trier des dates par mois sur excel - Guide
- Nombre de nuits entre deux dates ✓ - Forum Excel
- Si date comprise entre deux dates alors ✓ - Forum Excel
- Nombre de jours de date à date - Forum Excel
6 réponses
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)
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
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 ?
bonjour,
peux-tu montrer le code PHP que tu as essayé, il suffit peut-être de légèrement l'adapter.
//////////////////// 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 "";
}
}
}
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 = ...".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMerci 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.
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 "";
}
}
}
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 = ..."?
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.
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.