Calcul nombre enregistrement bd

Résolu/Fermé
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 - 12 août 2022 à 11:23
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 - 12 août 2022 à 17:26

Bonjour,

J'ai un base de donnée avec un champs "num_indiv". Ce n'est pas le champs de référence qui lui est "id".

Dans ma base j'ai 2684 enregistrement qui comporte tous un "num_indiv". Il devrait donc y avoir plus de 2684 num_indiv.

Si je regarde au hasard, je peux voir le 3077. Il y en a plus car cela dépend si j'ai fait des suppression.....

Si je rajoute un enregistrement dans ma bd, dans mon script de gestion, je vérifie le plus grand num_indiv

$req=mysql_query("select max(num_indiv) from individus"); 
$res=mysql_result($req,0,"max(num_indiv)" ); 		// recup du max num_indiv 
$toto = $res + 1;

Actuellement, si je veux créer des renregistrements, les num_indiv prennent automatiquement la valeur de 100.

Je vérifie la valeur max de num_indiv dans la base, et j'ai 99, alors que je devrais avoir plus de 3077 ????

Pourquoi ? D'où vient le problème ?

Merci

A voir également:

4 réponses

t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
12 août 2022 à 11:43

J'ai compris. Le champs num_indiv dans la bd est défini en DECIMAL.

Par contre, par la suite, je vais insérer (fusionner) des enregistrements d'une table ayant du texte dans les num_indiv (exemple : 456I).

Comment définir le champs num_indiv pour que ma fusion fonctionne avec les deux type d'enregistrement ?

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 1 556
12 août 2022 à 13:47

bonjour,

Cela dépend surtout de ce que tu souhaites obtenir après la fusion.

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11 > yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024
Modifié le 12 août 2022 à 14:19

J'ai la table A où le num_indiv correspond uniquement à des chiffres, défini en DECIMAL.

La table B où le num_indiv correspond uniquement à des chiffres+ 1 lettre (provient d'un logiciel).

Quand je recherche le dernier num_indiv sur la table A, pas de problème. Si je fusionne la table A + B, et que je veux rajouter des enregistrement consécutif à la table B, elle ne reconnait pas le numéro maximum de num_indiv, parce que chiffre + lettre n'est pas décimal.

Si je caractérise le champs num_indiv en TEXT, toutes créations suivante prendront 100 comme num_indiv, et ne seront pas incrémenté selon mon script. Le compteur num_indiv est bloqué à 99 avec TEXT, et à 7596 en DECIMAL.

	$req=mysql_query("select max(num_indiv) from individus"); 
	$res=mysql_result($req,0,"max(num_indiv)" ); 		// recup du max num_indiv 
	$toto = $res + 1;

Donc le lien entre les enregistrements est complètement faussé. avec les deux tables.

Je souhaite faite le lien entre les deux tables, que le TEXT soit reconnu comme le DECIMAL. En VARCHAR même problème.

Comment remédier à ce problème ? Comment caractériser le champs num_indiv pour qu'il reconnaissance les DECIMAL (77777) et le TEXT (555I) ?

Merci

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 1 556 > t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024
12 août 2022 à 14:27

Tes explications sont confuses:

  1. pourquoi les créations suivantes prennent 100 alors que tu as le 3077 dans ta table?
  2. tu parles de fusionner deux tables, puis de lien entre ces tables
  3. tu parles de tables A et B, puis tu montres une requête avec une table "individus"
0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
12 août 2022 à 14:55

1. Au départ, le" champs de la table A est défini en DECIMAL (555, ou 123, ou 1587....). Si je cherche le champs num_indiv max, j'ai 7596. Si je modifie les caractéristiques de ce champs en TEXT ou VARCHAR,  le champs num_indiv max devient  99 (??). Je pense que cela est dû au changement de caractéristique du champs.

2. Donc j'ai ma table A sous phpadmin avec le champs num_indiv en DECIMAL (555, ou 123, ou 1587....). Je récupère une base de donnée d'un logiciel généalogique. Par contre, les num_indiv sont 222I,143I, 1245I ........ toujours défini en DECIMAL, et ce n'est pas le cas ! Je fusionne ces deux tables. Le point de contact entre les deux tables, je modifie comme il faut. Chaque élément de la table est relié par num_indiv (père fils, mère_fils). Il y a deux type différents de num_indiv. Les 555, ou 123, ou 1587.... et les 222I,143I, 1245I ........Si je veux rajouter des éléments après le fusion, il me donne comme num_indv 100 automatiquement. Je pense que cela vient de la différences des deux styles de num_indiv !? Il faudrait que je caractérise le champs num_indiv pour que ça satisfasse les deux types de numéro que peut prendre ce champs.

3. La table A + B = table individus.

Il y aurait peut*être la solution que pour les num_indiv de la table B 222I,143I, 1245I, je les transforme en 22200,14300, 124500 ???

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 1 556
12 août 2022 à 15:17

ou les transformer en -222, -143, -1245, ...

ou bien 10222, 10143, 11245.

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11 > yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024
12 août 2022 à 15:19

Avec le - devant, je risque de retrouver le même problème. 

Je pensais plutôt à la deuxième solution.

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 1 556
12 août 2022 à 15:29

Si tu prends le maximum des textes, il prend le dernier par ordre alphabétique, c'est peut-être "99".

Il est surement possible de chercher le plus grand nombre à partir de textes, si tu le souhaites.

Peut-être:

select max(convert(num_indiv,DECIMAL)) from individus
0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11 > yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024
12 août 2022 à 15:44

Ouais, cela peut être intéressant !!!!

0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11 > yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024
12 août 2022 à 16:07

Si je fais 

UPDATE dameron_H SET num_indiv = REPLACE (num_indiv,"%I","-%") where num_indiv like "%I"

cela ne modifie aucun enregistrement

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 Ambassadeur 1 556
12 août 2022 à 16:37
UPDATE dameron_H SET num_indiv = REPLACE (num_indiv,"I","x") where num_indiv like "%I"
0
t671 Messages postés 1460 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 décembre 2024 11
12 août 2022 à 17:13

J'aimerai pouvoir modifier le champs 666I par 00666.

Je fais comment ? J'y arrive pô !

0
yg_be Messages postés 23383 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 9 décembre 2024 Ambassadeur 1 556
12 août 2022 à 17:26
UPDATE dameron_H 
SET num_indiv = concat("-", left(num_indiv ,CHAR_LENGTH(title)-1))
 where num_indiv like "%I"
0