Réinitialiser id chaque année
deep_sea
Messages postés
201
Date d'inscription
Statut
Membre
Dernière intervention
-
deep_sea Messages postés 201 Date d'inscription Statut Membre Dernière intervention -
deep_sea Messages postés 201 Date d'inscription Statut Membre Dernière intervention -
Bonjour ,
a chaque validation d'une demande , un id est attribué automatiquement , ce id est incrémenter durant l'année et sera réinitialiser a 1 la nouvelle année
Table compteur_demande
id int key
year_demande key
exemple :
Durant l'année
1 2019
2 2019
3 2019
4 2019
....
n 2019
Nouvelle année
1 2020
2 2020
mon problème malgré l'arrivé de la nouvelle année , le compteur ne se réinitialise pas
voici ma fonction
a chaque validation d'une demande , un id est attribué automatiquement , ce id est incrémenter durant l'année et sera réinitialiser a 1 la nouvelle année
Table compteur_demande
id int key
year_demande key
exemple :
Durant l'année
1 2019
2 2019
3 2019
4 2019
....
n 2019
Nouvelle année
1 2020
2 2020
mon problème malgré l'arrivé de la nouvelle année , le compteur ne se réinitialise pas
voici ma fonction
public Integer maxIdCompte(){ try { int id = 0; int anne = Calendar.getInstance().get(Calendar.YEAR); TypedQuery<Integer> max_date= em.createQuery("SELECT max(year_demande) from compteur_demande ORDER BY year_demande DESC LIMIT 1", Integer.class); if(max_date.getSingleResult() != null) { if(max_date.getSingleResult()== anne) { TypedQuery<Integer> max_id= em.createQuery("SELECT COALESCE(max(id),0) FROM compteur_demande ORDER BY year_demande", Integer.class); id = max_id.getSingleResult() +1 ; return id; } else { id = 1; return id; } } else return null; } catch (Exception e) { return null; } }
A voir également:
- Réinitialiser id chaque année
- Reinitialiser pc - Guide
- Reinitialiser pc sans mdp - Guide
- Réinitialiser manette ps4 - Guide
- Réinitialiser chromecast - Guide
- Reinitialiser iphone - Guide
8 réponses
Bonjour,
Voir aussi ton ancienne discussion (que je ferme, ça sert à rien d'en avoir deux...)
https://forums.commentcamarche.net/forum/affich-36421418-reinitialiser-un-id-d-un-compteur-chaque-annee
Voir aussi ton ancienne discussion (que je ferme, ça sert à rien d'en avoir deux...)
https://forums.commentcamarche.net/forum/affich-36421418-reinitialiser-un-id-d-un-compteur-chaque-annee
deep_sea
Messages postés
201
Date d'inscription
Statut
Membre
Dernière intervention
1
le probléme n'a pas été encore validé
KX
Messages postés
16761
Date d'inscription
Statut
Modérateur
Dernière intervention
3 020
>
deep_sea
Messages postés
201
Date d'inscription
Statut
Membre
Dernière intervention
Non, mais cela évitera d'explorer ici la piste du trigger qui a déjà été évoqué dans l'autre discussion...
Bonjour,
Je ne sais pas comment le coder en java, mais pourquoi ne pas tout simplifier, une fois
Je ne sais pas comment le coder en java, mais pourquoi ne pas tout simplifier, une fois
annerécupérée avec la date courante, un seul select :
SELECT COALESCE(max(id),0) FROM compteur_demande WHERE year_demande = anne
mais je dois tester d'abord ,
si la date courante = = max(date_demande)
alors retourner max(id)
sinon retourner 1
si la date courante = = max(date_demande)
alors retourner max(id)
sinon retourner 1
Il ya plusieurs enregistrement par année .
avec 1 seul select ça marche pas , toujours le compteur incrémente malgré la nouvelle année
avec 1 seul select ça marche pas , toujours le compteur incrémente malgré la nouvelle année
Salut,
si c'est une id dans le sens champ identifiant ce n'est clairement pas une bonne idée d'y toucher!
En tout cas je vous conseille de changer la structure de vos tables pour utiliser l'identifiant naturel si ce n'es pas le cas (en tout cas d'avoir une id qui sera identifiante donc ne changera pas ).
Sinon ça semble une question de SQL et je voit pas pourquoi vous ne pouvez pas sélectionner tous les champs concernés pour leur attribuer la valeur voulue.
Utilisez des sous-requêtes ce qui sera plus simple que de faire un test logique dans java, ou en tout cas plus naturel et évitera d'avoir 2 requêtes pour une seule opération.
UPDATE (SELECT /*champs concernnés ou seulement leur ID */ WHERE /* clause de sélection*/)champ concernnées, nouvelle valeur à attribuer
entre parenthèse la sous-requête approximative, tout ça bien sûr à adapter à la structure de vos champs.
si c'est une id dans le sens champ identifiant ce n'est clairement pas une bonne idée d'y toucher!
En tout cas je vous conseille de changer la structure de vos tables pour utiliser l'identifiant naturel si ce n'es pas le cas (en tout cas d'avoir une id qui sera identifiante donc ne changera pas ).
Sinon ça semble une question de SQL et je voit pas pourquoi vous ne pouvez pas sélectionner tous les champs concernés pour leur attribuer la valeur voulue.
Utilisez des sous-requêtes ce qui sera plus simple que de faire un test logique dans java, ou en tout cas plus naturel et évitera d'avoir 2 requêtes pour une seule opération.
UPDATE (SELECT /*champs concernnés ou seulement leur ID */ WHERE /* clause de sélection*/)champ concernnées, nouvelle valeur à attribuer
entre parenthèse la sous-requête approximative, tout ça bien sûr à adapter à la structure de vos champs.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour ,
je ne peux pas charger la structure de la table !
J'ai fait ces modifications ,mais malgré ça le compteur incrémentera
je ne peux pas charger la structure de la table !
J'ai fait ces modifications ,mais malgré ça le compteur incrémentera
public Integer maxIdCompte(){ try { TypedQuery<Integer> query = em.createQuery("SELECT COALESCE(max(id),1) FROM compteur_demande \n" + "where year_demande != ( SELECT max(year_demande) from compteur_demande ORDER BY year_demande DESC limit 1)\n" + " ORDER BY year_demande", Integer.class); if(query.getSingleResult() != null) return query.getSingleResult(); else return null; } catch (Exception e) { return null; } }
oui effectivement , je cherche a incrémenter le compteur durant l'année et a le réinitialise a chaque nouvelle année
avez vous d'autre méthode a utiliser !
Bonjour,
Il y a plein de manières de faire, un certain nombre ont déjà été évoquées dans cette discussion et dans la précédente. Mais globalement ce n'est quand même pas très compliqué à mettre en place, et avec toutes les informations que l'on t'as déjà donné, code à l'appui, je ne vois vraiment pas pourquoi tu bloques encore 3 mois après !
Pour rappel : CommentCaMarche est un forum d'entraide, c'est à dire que malgré l'aide que l'on peut t'apporter (et il y en eu), c'est à toi qu'il revient au final de faire ce travail. De plus tu es fortement invité à respecter les bénévoles qui te répondent ou t'ont répondu par le passé, a minima par l'usage du Bonjour, du S'il vous plaît, et du Merci.
Il y a plein de manières de faire, un certain nombre ont déjà été évoquées dans cette discussion et dans la précédente. Mais globalement ce n'est quand même pas très compliqué à mettre en place, et avec toutes les informations que l'on t'as déjà donné, code à l'appui, je ne vois vraiment pas pourquoi tu bloques encore 3 mois après !
Pour rappel : CommentCaMarche est un forum d'entraide, c'est à dire que malgré l'aide que l'on peut t'apporter (et il y en eu), c'est à toi qu'il revient au final de faire ce travail. De plus tu es fortement invité à respecter les bénévoles qui te répondent ou t'ont répondu par le passé, a minima par l'usage du Bonjour, du S'il vous plaît, et du Merci.
Bonjour ,
D'abords , je vous remercie pour votre aide
le problème j'ai essaye la procédure des trigger et ça marche parfaitement , mais je voulais garder le même programme que j'ai avec une petite modification sans toucher la base de donnée.
Mes sincère salutation
ps: je suis en retard car je travaille sur plusieurs logiciel en mème temps
D'abords , je vous remercie pour votre aide
le problème j'ai essaye la procédure des trigger et ça marche parfaitement , mais je voulais garder le même programme que j'ai avec une petite modification sans toucher la base de donnée.
Mes sincère salutation
ps: je suis en retard car je travaille sur plusieurs logiciel en mème temps