Page 1 sur 1

Attribution id SQL par PHP

Posté : 29 sept. 2005, 17:54
par PsykoCors
Bonjour,

J'ai un probleme lors d'insertion de nouvelles donnée
En fait, je rentre une liste de personnes (par formulaire php).

Admettons que j'ai 6 personnes (id=1,2,3,4,5,6), et que je supprime id=4 ; id=5 et id=6 (par php bien sur)

Et lorsque je rerentre une personne, l'id donné va etre le 7 alors que le 4,5 et 6 n'est pas attribué. :?

J'ai pensé à une attribution id par ce code :
//Atribution de l'id
$id=1;
$sql = "SELECT * FROM `eleves`";
$req = mysql_query($sql);
while($creation_id = mysql_fetch_array($req)){
$id=$id+1;
}
ce code marche ... sauf lorsqu'il y a des "trous"(exemple: id=1,2,4,5,6 attribué ; id=3 non attribué). Avec ce code donc $id va etre egal à $id=6, mais celui ci est déjà pris donc pas d'insertion (evidement) :cry:

J'ai donc pensé a ajouter à ma boucle une sorte de "vérification", pour voir si l'id est prise, ce qui donnerai un code de ce genre (ce code n'est pas terminé) :
//Atribution de l'id
$id=1;
$sql = "SELECT * FROM `eleves`";
$req = mysql_query($sql);
while($creation_id = mysql_fetch_array($req)||$verif=="-1"){
$sql2 = "SELECT id FROM `eleves` WHERE 'id=$id'";
$req2 = mysql_query($sql2);
$verif_exist = mysql_fetch_array($req2);
//vérification si l'id en cour est donné
if ($verif_exist==""){
$verif="-1";
$id=$id-1;}
else {
$id=$id+1;
echo $id;
}
}
Ce code est farfelue, ne marchera surrement pas au final (je ne l'ai pas terminé, je reprécise)...

Mais je supose qu'il y a plus simple, voir une proprité SQL qui permet de facilité les choses (je ne comprend pas comment mySQL sait que ces id ont été deja prise, alors que je les ai supprimé). :?

J'espere que vous avez compris

Merci de votre aide.

Posté : 29 sept. 2005, 17:58
par jeff
salut
je suppose que tu utilise un autoincrement sur ton champ
si c'est le cas c'est normale.
A tu besion réllement de combler tes "trous"?? car un id ne transporte aucune information

Posté : 29 sept. 2005, 18:00
par PsykoCors
Un "réel" besoin, pas vraiment, mais je me vois mal arriver à un id de 265 alors que j'ai que 50 personnes enregistrées (par exemple)

Simplement pour plus de clarté

Posté : 29 sept. 2005, 18:07
par jeff
tu pourrai tres bien faire en sorte d'éliminer les "trous" mais cela va te prendre beaucoup de ressource un update sur 10000 lignes c'est pas instantané
si tu veut compté tes membres tu fait une requete select avec count

Posté : 29 sept. 2005, 18:10
par PsykoCors
Utiliser COUNT revient kiff kiff à ma premiere boucle ...

Je pensais qu'il y avait une propriété MySQL vu qu'il retient visiblement l'id le plus grand enregistré (ou anciennement enregisté ...)

Posté : 29 sept. 2005, 18:20
par Truc
Salut, je sait pas s'il existe une propriété SQL pour faire ce que tu veux, mais une boucle peut le faire:
$id=1;
$arret=0;
$sql = "SELECT id FROM eleves ORDER BY id";
$req = mysql_query($sql);
while(($creation_id = mysql_fetch_array($req)) && (!$arret))
{
if($creation_id['idInscrit']==$id) //Si l'id se trouve deja dans la table
	$id=$id+1;
else
	{
	$id_insert=$id;  // si l'id est libre
	$arret=1;
	}
}
echo "Nouvelle id a inserer ".$id_insert;

Posté : 29 sept. 2005, 22:35
par pjl
tu pourrai tres bien faire en sorte d'éliminer les "trous" mais cela va te prendre beaucoup de ressource un update sur 10000 lignes c'est pas instantané
si tu veut compté tes membres tu fait une requete select avec count
Ca se passe comment pour les numéros de sécu d'après toi ?
Est-ce que tu crois que lorsque quelqu'un meurt, on reprend son numéro de sécu ?
Non, alors ne te prends pas la tête et laisse l'auto-increment travailler pour toi.

Posté : 29 sept. 2005, 23:03
par zeus
un id, par definition est un numerode fonctionnement, une référence unique. Si tu as 50 clients et un id de 10005, rien à faire, il n'y a que ta bdd qui sera au courant.

De plus, si tu commence à changer les id, dès que tu vas utiliser des références, il faudra faire des MAJ sur ces références.

Pour aller dans le sens de pjl, les identifiants sont des chiffres unique servant à identifier un enregistrement et tu ne doit pas t'amuser à le changer. Laisse travailler l'auto-increment ;)

Posté : 01 oct. 2005, 14:11
par PsykoCors
Merci pour vos reponces ! :D