|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : février 2007 Messages : 163 ![]() |
Bonjour.
J'aurais voulu savoir s'il existait de définir la valeur par défaut d'un champ d'une table avec la valeur max de ce champ. En gros un truc du genre : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
J'en doute fortement de façon aussi directe, mais tu peux simuler cela avec un trigger.
A noter que si tu as des insertions massives à faire, un trigger va te plomber les perf donc à voir selon ton besoin.
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Tu peux aussi créer une fonction scalaire qui te renvoi le max... et appeler cette fonction dans ton DEFAULT pense a créer un index sur cette colonne par curiosité, pourquoi veux-tu faire ça ? |
|
|
00
|
|
|
#4 | ||
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 654 ![]() |
Bonjour,
Attention est-ce que les solutions proposées fonctionneront lors d'un Code :
Cordialement Soazig |
||
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 739 ![]() |
Pour le trigger, comme je l'avais indiqué, c'est plus que moyen niveau perf pour les insertions en masse.
Je bypass toujours les triggers lorsque c'est possible pour les grosses insertions. Pour la solution de aieeeuuuu, qui est à mon avis plus adaptée, les impacts devraient être moindre. Cependant si tu as beaucoup d'insertions, il sera à mon avis plus efficace de calculer le max des valeurs présentes en table avant l'insertion, le max de tes valeurs à insérer et d'utiliser directement la plus grande valeur des deux dans ton insert. Ca evitera de calculer de nombreuses fois le max. Ce qui me choque plus dans un tel souhait, c'est que selon l'ordre d'insertion de tes données, tu n'auras pas forcement la même valeur de max. Et les anciennes valeurs inserées ne correponderont au final qu'à un max à instant donné. Voir à rien du tout en cas d'insertion massive (sauf si tu calcules le max avant). Du coup je rejoins aieeeuuuu c'est pour quelle utilisation ?
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela. La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber. (\ _ /) (='.'=) Voici Lapinou. Aidez le à conquérir le monde (")-(") en le reproduisant |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
par contre, effectivement, si la table fait l'objet de nombreux inserts, la c'est autre chose... C'est pourquoi il faudrait en savoir un peu plus sur le contexte, pour trouver la meilleure solution car d'autres peuvent être envisagées... |
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : février 2007 Messages : 163 ![]() |
Bonjour tout d'abord merci pour toutes vos réponses, je n'en attendais pas tant.
Cette question était plus une curiosité qu'un réel problème puisque pour solutionner mon problème j'ai d'abord récupèré le max pour ensuite l'insèrer. Pour le contexte c'est une table dans laquelle j'ai un champ "ordre". Ceci représentera l'ordre dans lequel je vais afficher les résultats. Et donc, je voulais que quand j'ajoute un nouvel enregistrement par défaut je prenne le max. Mais étant donné que c'est une table qui sera amenée à être utilisée de façon moindre, j'ai simplement fait que lorsque j'enregistre dans ma base, si l'info n'a pas été donnée je récupère le max. Il s'agissait plus d'enrichir ma culture "SQLesque" que d'un réel problème. :p Merci encore. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Bonjour,
Est-ce qu'une colonne de type sérial ne ferait pas l'affaire ? Tatayo. |
|
|
00
|
|
|
#9 | |
![]() ![]() |
Citation:
Une colonne de type serial est pour auto-incrémenter un identifiant (clé primaire) d'une table. Ce que j'ai compris est que la table a une colonne "ordre" dans laquelle les valeurs ne sont pas forcément dans l'ordre d'enregistrement des données mais que lorsqu'on insère une nouvelle ligne, si la colonne ordre n'a pas de valeur affectée, alors on y affecte la valeur maxi de cette colonne. En gros, on pourrait avoir la situation suivante : id, donnee, ordre 1, gdfh, 2 2, kgfhkj, 5 3, igdufhy, 3 4, sdjgfh, 1 5, dofjgh, 4 Et à l'insertion d'une nouvelle ligne, si la valeur de l'ordre n'est pas donnée, il faudrait affecter la valeur 5. Un trigger peut effectivement faire l'affaire s'il ne faut insérer qu'une seule ligne.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#10 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Vous pourriez le faire en une seule requete : Code SQL :
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com