trou id mysql

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 09:33

salut à tous,
J'ai un ptit nouveau pb...
voila en fait, j'ai une table qui se remplis par un formulaire présent sur mon site où chaque entrée possède un ID auto incrémenté...
J'ai supprimé une ou deux entréé. mais lorque qqun d'autre re remplis le formulaire, il se trouve que les id supprimé ne sont pas réutilisé. ce qui fait que dans la table, sa saute de l'id 7 à l'id 10 par exemple...
comment faire pour que lorsque je supprimé l'idée 8, la table soit reprise à cet endroit.

merci,
thomaS.

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 09:38

ou bien juste comment éviter que ma table affiche qqchose qui n'est pas présent dans la table ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 09:38

Déjà, si tu as mis un id auto-incrémenté, il ne reprendra jamais un id qu'il a déja utilisé.

Ensuite il existe une requete SQL qui permet de changer la valeur courante de l'auto-increment de la forme ALTER TABLE table AUTO-INCREMENT=num mais je ne suis pas sûr de la syntaxe (Tu peut le faire sous phpMyAdmin dans OPERATIONS lorsque tu explore ta table)

Ensuite quel est l'intérêt ? Si c'est juste pour éviter des trous, c'est pas absolument nécessaire !!! Juste par curiosité, je voudrais que tu me donne la raison...

merci d'avance
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 09:41

Et bien en fait, c'est pour éviter d'avoir des trous dans ma table...
Ensuite, comme je fais afficher dans un tableau les valeurs de ma table par le biai de l'incrémention de mon id, je ne peux pas qu'il affiche le texte du tableau avec des données que l'on vois pas car il en a pas.
car il affiche le 1er id, ensuite le 2nd et ainsi de suite et si sa passe du 7ème id au 10 ième ben j'aurai 2 tableaux affiché sur ma page mais sans valeur dedans... et c pas bien koi...

ecnore merci,
thomas.

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 09:43

Merci beaucoup pour le tuyau dans l'onglet opération...
le pire c'est que j'y ai été tout à l'heure, et jdevais tellement biglé que je ne l'ai pas vu... tout en bas.

Encore merci à toi,
Thomas.

P.S: si tu as une alternative plus dévellopper pour éviter ce genre de merde... tu peux partager ton savoir, j'apprendrais =)

ViPHP
ViPHP | 1024 Messages

27 mai 2005, 09:45

Et bien en fait, c'est pour éviter d'avoir des trous dans ma table...
Ensuite, comme je fais afficher dans un tableau les valeurs de ma table par le biai de l'incrémention de mon id, je ne peux pas qu'il affiche le texte du tableau avec des données que l'on vois pas car il en a pas.
car il affiche le 1er id, ensuite le 2nd et ainsi de suite et si sa passe du 7ème id au 10 ième ben j'aurai 2 tableaux affiché sur ma page mais sans valeur dedans... et c pas bien koi...

ecnore merci,
thomas.
il ne faut pas afficher par l'incrémentation d'un id mais par une lecture (SELECT ) des enregistrements en base et affichage selon les id retournés.


A+

Pascal

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 10:02

Si je peut me permettre une critique, un id, auto-incrémenté en plus, ne doit JAMAIS être affiché !!!!

C'est une variable qui permet d'identifier de manière unique un enregistrement dans une table (d'où son nom ... :langue:) mais ce n'est pas visible !!!!!

Si tu prend ce constat, tu n'as pas à te soucier des trou d'id dans ta table !!!!

Comme le dit Pascaltje, tu fait une requete SELECT * et tu parcours le jeu d'enregistrement, il va tout t'afficher sans bloquer sur les trou d'id !!!!

Sinon, la requete exacte pour changer un auto-increment, c'est

Code : Tout sélectionner

ALTER TABLE `table` AUTO_INCREMENT = 1
Sachant que tu doit faire attention à ce que l'id que tu donne ne soit pas déjà pris !!!! et qu'il soit supérieur à tout les id présent dans la table !!!

Mais encore une fois, je pense qu'il vaut mieux modifier ton code pour qu'il ne bloque pas sur les id plutôt que de modifier l'auto-increment de ta table
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
pjl
ViPHP | 2119 Messages

27 mai 2005, 12:34

Et bien en fait, c'est pour éviter d'avoir des trous dans ma table...
Ensuite, comme je fais afficher dans un tableau les valeurs de ma table par le biai de l'incrémention de mon id, je ne peux pas qu'il affiche le texte du tableau avec des données que l'on vois pas car il en a pas.
car il affiche le 1er id, ensuite le 2nd et ainsi de suite et si sa passe du 7ème id au 10 ième ben j'aurai 2 tableaux affiché sur ma page mais sans valeur dedans... et c pas bien koi...

ecnore merci,
thomas.
on serait curieux de voir ton code.

Sinon, pour ton histoire d'id, imagine que ta rue est une table de ta base de données.
Tu as le paté de maison avec les numéros 7,9,11 qui a été démoli pour construire un immeuble qui garde le numéro 7.
Est ce que l'absence des numéro 9 et 11 va géner le facteur ?
Non, et ca doit être la même chose pour ta base de données.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 12:38

Franchement pjl, j'adore ta manière d'expliquer =D> !!!! Sans rire !!!!

La métaphore est géniale !!!! Faut que je retienne :pouce:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 13:45

"Si je peut me permettre une critique, un id, auto-incrémenté en plus, ne doit JAMAIS être affiché !!!! "
Ce n'est pas l'id que j'affiche mais les informations contenu sur la même ligne...
(voir code plus bas)

"C'est une variable qui permet d'identifier de manière unique un enregistrement dans une table (d'où son nom ... ) mais ce n'est pas visible !!!!!"
Merci de prend la peine d'expliquer, mais je savais :D (voir code plus bas ;)

"on serait curieux de voir ton code."
Le voici (je vous ai enlever tout l'html qui faisait les tableaux et tout sa...) :

<?php
include("config.inc.php");

mysql_selectdb($base);

$sql = "SELECT id FROM notre***** ORDER BY id DESC LIMIT 0,1";
$result = mysql_query($sql, $db);
$row = mysql_fetch_array($result);
$id = $row['id'];

$id2=0;

while($id2<$id){
$sql2 = "SELECT * FROM notreamour WHERE id='$id'";
$result2 = mysql_query($sql2, $db);
$row2 = mysql_fetch_array($result2);

if($row2['qui'] == "Pauline"){
echo "Thomas";
}else{
echo "Pauline";
}

echo $row2['qui'];
echo $row2['date'];
echo $row2['heure'];
echo nl2br($row2['message']);
$id--;
}

?>


ALORS, qu'en pensez vous ? dites moi sincere, svp.

Merci à tous,
Thomas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 14:11

Sincèrement, tu te prend la tête pour rien ...

tu rècupère tout les identifiants de la table pour sélectionnez chaque ligne ensuite

Test ce code et tu m'en diras des nouvelles :
<?php
include("config.inc.php");

mysql_selectdb($base);

$sql = "SELECT id FROM notre*****";
$result = mysql_query($sql, $db);

while($a_result = mysql_fetch_array($result)){
	if($a_result['qui'] == "Pauline"){
		echo "Thomas";
	}else{
		echo "Pauline";
	}

	echo $a_result['qui'];
	echo $a_result['date'];
	echo $a_result['heure'];
	echo nl2br($a_result['message']);
}

?> 
En fait, je sélectionne tout le contenu de ta table et j'affiche tout, ligne par ligne ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 14:37

ton code n'affiche que : Pauline Pauline Pauline Pauline Pauline Pauline Pauline Pauline Pauline (autrement dis, aucune autre infos :s

tu ne te serai pas tromper sur le SELECT ?

Thomas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 14:55

Comment t'es fort !!!

Je suis completement passé au travers !!!

En fait j'ai fait un copier/coller de ton code et j'ai juste supprimé la fin de la requete !!!

LE code corrigé est :
<?php
include("config.inc.php");

mysql_selectdb($base);

$sql = "SELECT * FROM notre*****";
$result = mysql_query($sql, $db);

while($a_result = mysql_fetch_array($result)){
    if($a_result['qui'] == "Pauline"){
        echo "Thomas";
    }else{
        echo "Pauline";
    }

    echo $a_result['qui'];
    echo $a_result['date'];
    echo $a_result['heure'];
    echo nl2br($a_result['message']);
}

?>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

mousquito2b
Invité n'ayant pas de compte PHPfrance

27 mai 2005, 14:58

Effectivement, sa marche...
reste plus qu'a mettre sa en forme avec tableau et tout le tralala...

Sinon, que pensais tu de mon script ???
quel défaut ? quel truc lourd ?

Merci particulièrement à toi ainsi qu'aux autres,
Thomas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 mai 2005, 15:09

Sur le script que tu m'as donné, tu interrogeais ta table pour qu'elle te donne tous les identifiants et ensuite tu réinterrogais ta table pour récupérer les enregistrements 1 par 1 !!!!

Comme tu peux le voir dans le script que je t'ai donné, un accès est suffisant, c'est un php que tu navigue d'un enregistrement à l'autre !!!

De même, pourquoi est ce que tu triais tes index du plus grand au plus petit pour ensuite faire un affichage du dernier au premier ? Alors qu'il te suffisait de sélectionner du plus petit au plus grand et d'afficher du 1er au dernier!!!

Mais cette erreur était lié à la prmière !!!

Essaye de bien comprendre mon script, c'est la manière la plus basique d'afficher le contenu d'une table MySQL !!!
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer