Obtimiser la base (le champ ID)

slyderkiller Messages postés 145 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 16 février 2012 - 1 oct. 2005 à 01:08
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 1 oct. 2005 à 08:16
slt a tt
je voudrais avoir la solution pour obtimiser mon champ id de ma table images voir photo jointe

voila donc comment je peux faire si je ve remplacer mon champ "id" par
1.2.3.4.5 a la place de 13 10 8 11 12 sachant que je ne suis pas sencé connaitre
se qu'il y a dans le champ id .

je pense que ca devrais donné un truc du genre

<?php
//on compte le nombres d'entrées du champs ID
$sql = "SELECT COUNT(*) AS id FROM images";
$nombre_id = @mysql_query($sql,$dbconnect);
$limit = ($nombre_id-1);


//on met a jour le champs id
for ($inc_id = 1; $inc_id <= $nombre_id; $inc_id++)
{
$dbecriture = "UPDATE images SET id='$inc_id' WHERE id='???' LIMIT 0, $limit";
}
mysql_close();
?>

probleme de cette requette c'est qu'elle oblige un WHERE mais comme je l'ai dis je ne pe pas le savoir
donc si vous avez une idée merci

1 réponse

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 oct. 2005 à 08:16
Salut!

Je pense que je ferais ca autrement:

Tu récupère tous les id ( classés par ordre croissant ) et tu fais une
boucle commencant par 1 et allant jusqu'au nombre d'enregistrement:



$result = mysql_query( "SELECT id FROM images ORDER BY id ASC" ) or die('MySQL Error');



// nombre d'images

$nb_rows = mysql_num_rows( $result );

// premier enregistrement

$row = mysql_fetch_row( $result );



for( $i = 1; $i <= $nb_rows; $i++ )

{

// si l'id de l'enregistrement n'est pas ce qu'il devrait être

if( $row[0] != $i )

{

// il faut remplacer par $i lid de l'enregistrement qui a l'id $row[0]

}



// prochain enregistrement

$row = mysql_fetch_row( $result );

}



Ca doit marcher. Mais, c'est très lourd, ca peut exploser le timeout et c'est pas beau, ^^

Le mieux c'est de modifier ca chaque fois que supprime un enregistrement:

- tu récupère l'id de l'enregistrement que tu vas supprimer

- tu le supprimes

- tu prends l'id du dernier enregistrement de la table ( ORDER BY id DESC LIMIT 0, 1 )

- tu remplace l'id du dernier enregistrement par celui qui a été supprimé



@++



R@f
www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
Rejoignez-nous