Actualiser dates sans dates manquantes
Ferméyg_be Messages postés 23451 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 31 janvier 2025 - 10 juil. 2022 à 21:00
- Actualiser dates sans dates manquantes
- Nombre de jours entre deux dates excel - Guide
- Nombre de nuits entre deux dates ✓ - Forum Bureautique
- Bouton actualiser google chrome ✓ - Forum Réseaux sociaux
- Calcul nombre de nuits entre 2 dates avec critères de périodes ✓ - Forum Excel
- Insérer un sélecteur de dates excel - Forum Excel
6 réponses
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)
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
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?
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.
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 = ...
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 ?
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.
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 "";
}
}
}
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 = ...".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question10 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.
10 juil. 2022 à 14:57
As-tu adapté ton code en fonction de mes suggestions?
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 "";
}
}
}
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 = ..."?
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.
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.