Ajouter des jours à une DATE

Bonjour,

Petite question après plusieurs recherches infructueuses :

J’ai une table MySQL qui comporte, entre autres, un champ “date” de type “datetime” (2008-11-03 13:14:07) et un champ “jours en plus” de type int.

J’ai besoin de faire un script qui rajouterait un ou plusieurs jours (jours en plus) à ma date.

L’idée étant tout simplement “d’incrémenter” les jours de ma date en fonction de ma table “jours en plus”.

J’espère avoir été assez clair :stuck_out_tongue:

Merci d’avance

Fait toi plaisir :

dev.mysql.com…

select DATE_ADD("date", INTERVAL "jours en plus"  DAY)
from ...

HEllo

Merci de ton aide.

En fait j’ai lutté une bonne partie de l’apres midi d’hier avec cette fonction que je n’arrive pas à mettre en œuvre :stuck_out_tongue:

Ma table est de ce style :

|------------ Date -----------|-- jours en plus —|
|2008-11-03 13:14:07 | 3 |
|2008-09-27 11:18:57 | 7 |
|2008-03-03 15:14:55 | 1 |

J’ai besoin de faire une requete affichant un tableau de la forme :

|------------ Date -----------|-- jours en plus —| Date + jours en plus |
|2008-11-03 13:14:07 | 3 | 2008-11-06 |
|2008-09-27 11:18:57 | 7 | 2008-10 -03 |
|2008-03-03 15:14:55 | 1 | 2008-03-04 |

Je continue à tester en attendant :slight_smile:

genre :


select "date", "jours en plus", DATE_ADD("date", INTERVAL "jours en plus" DAY)
from ...

En fait cela est un poil plus compliqué que ça puisque mon champ date et mon champ jour en plus sont dans deux tables différentes.
|—ID----|------------ Date -----------|
|—1-----|2008-11-03 13:14:07 |
|—2-----|2008-09-27 11:18:57 |
|—3-----|2008-03-03 15:14:55 |

|—ID----|--------jours en plus -----------|
|—1-----|-------3 ------------------------- |
|—2-----|-------7 ------------------------- |
|—3-----|-------1-------------------------- |

Pour le moment je fais une jointure (INNER JOIN) pour afficher un tableau | ID | DATE | Jours en plus, et j’amerai rajouter une colonne à l’affichage calculant donc la date majorée.

Merci de ton aide

ben si tu sais faire les requêtes, tu as tout hein.

En 1 ou 2 requètes (1 requete pour la jointure, une pour la date ou 1 requete pour les 2 besoins ) ?
Je découvre le SQL, sorry…


Ce que j'ai du mal à saisir en fait c'est que la requete DATE_ADD modifie directement mon champ date lors de l'ouverture, hors j'aimerai afficher l'id, la date ET la date majorée ?

Je dois pas être bien reveillé :slight_smile:

gné?

Je vais être gentil et te mâcher le boulot :

select A."Date", B."jours en plus", , DATE_ADD(A."date", INTERVAL B."jours en plus" DAY) as maxDate
from table1 A
inner join table2 B on A.ID = B.ID

Quand tu fais un select tu ne modifie rien du tout… tu ne fais que choisir des tuples

Je me suis mal exprimé juste avant, j’ai bien saisie le SELECT :slight_smile:
Je vais tester (même si ma requete actuelle s’approche grandement de ce que tu me proposes).
Merci “Sans-Nom”
Edité le 04/12/2008 à 10:54

Voilà ma requète (elle était quasiement identique à la tienne, mais sans le “as maxdate”):

$requete = mysql_query(“SELECT A.ID,A.date,A.date,B.Nom_Contrat,B.Numero_Contrat,B.Duree_Prevue, DATE_ADD(A.‘date’, INTERVAL B.‘Duree_prevue’ DAY) as maxDate FROM B INNER JOIN A ON A.category=B.Numero_Contrat ORDER BY A.ID”) OR die(‘Erreur de la requête MySQL’);

Dure_prevue représentant “les jours en plus”.

J’ai la même erreur de puis hier “Parse error: syntax error, unexpected $end in /var/www/index.php”

Dois je déclarer ce “maxdate” au préalable ?
Edité le 04/12/2008 à 11:22

C’est pas compliqué. En prog, dans tous les cas, tu as plusieurs étapes :

analyse lexicale (déterminer que if est un mot clef, etc)
analyse syntaxique (déterminer que a + b est bien une addition)
analyse sémantique (déterminer que a + b est possible, c’est à dire que a peut être additionné à b, ex: tu ne peux pas additionner une orange avec une pomme, ça n’a pas de sens).

Parse error = problème d’analyse syntaxique (syntax error)

Quand il te dis unexpected $end, c’est qu’il est tombé sur la fin du fichier, donc ton code n’est pas bon. Cherche l’erreur, je ne la vois pas dans ce que tu file.

En revanche, j’ai mis des délimiteurs SQL ("). En SQL ’ sert à délimiter des chaines, donc là ta requête plantera.
Edité le 04/12/2008 à 11:27

J’ai beau retourner ma requète dans tous les sens, je ne comprends pas où il bloque pour me sortir ce $end…
Je vais continuer à chercher…

maxDate doit être déclaré quelque part ?
J’ai crée un champ de type datetime nommé maxDate (vide) dans ma table B, et édité ma requete en conséquence mais toujours rien :slight_smile:
Je sais je sais, midi approche, je suis un peu gonflant

Merci
Edité le 04/12/2008 à 12:07

J’ai un petit avancé :

$requete = mysql_query('SELECT glpi_tracking."ID",glpi_tracking."category",glpi_tracking."date",liste_contrats."nom_contrat",liste_contrats."numero_contrat",liste_contrat."duree_prevue",liste_contrats."maxdate", DATE_ADD(glpi_tracking."date", INTERVAL liste_contrats."duree_prevue" DAY) as liste_contrats."maxdate" FROM liste_contrats INNER JOIN glpi_tracking ON glpi_tracking.category = liste_contrats.numero_contrat');
	
	if (!mysql_fetch_row($requete)) {
	echo "Aucun enregitrement ne correspond à la requete 2\n";
	}

Me retourne : aucun enregistrement ne correspond à la requète.

Je dois donc toucher au but :stuck_out_tongue:

Fait :

echo 'SELECT glpi_tracking."ID",glpi_tracking."category",glpi_tracking."date",liste_contrats."nom_contrat",liste_contrats."numero_contrat",liste_contrat."duree_prevue",liste_contrats."maxdate", DATE_ADD(glpi_tracking."date", INTERVAL liste_contrats."duree_prevue" DAY) as liste_contrats."maxdate" FROM liste_contrats INNER JOIN glpi_tracking ON glpi_tracking.category = liste_contrats.numero_contrat';

Copie ce qui est affiché dans phpmyadmin, et corrige pas à pas…

Merci pour ton aide (ça fonctionne)
Edité le 04/12/2008 à 14:22