reindexation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : reindexation

par pascaltje » 01 juil. 2005, 16:30

pour les trous dans les id, je te conseille cette lecture très instructive:

http://www.phpfrance.com/forums/voir_sujet-3622.php

A+

Pascal

par laTulipe » 01 juil. 2005, 15:37

comme je suis presse et comme le nbre de pays ne bougera pas, j'ai fait un truc approximatif qui fonctionne
		$query="select paysID, pays from pays order by pays asc";
		$result=mysql_query($query,$link);
		$i=1;
		echo "<table width=\"600\">\n<tr>\n";
		while($row=mysql_fetch_array($result)){
			if($i==1){
				echo "<td valign=\"top\">\n";
			}
			echo $row["pays"]."<br />";
			$i++;
			if($i==12){
				echo "</td>\n";
				$i=1;
			}
		}
		echo "</td>\n</tr>\n</table>";
		mysql_free_result($result);
merci a vous en tous cas

par pjl » 01 juil. 2005, 12:03

pour ca que je lui ai dit de reprendre ton code.
Il a une valeur à changer et un calcul à faire et ca doit passer.

par zeus » 01 juil. 2005, 11:55

En fait laTulipe avait déjà commencé un code de ce genre là et je lui ai déconseillé, du moins comme elle le faisait car ily a des tas de cas particuliers a gérer : nombres non multiples de 3, arondis à la louche , ...

par pjl » 01 juil. 2005, 11:53

en fait, c'est tres bien mais je voudrais les classer par ordre alphabetique du haut vers le bas et pas horizontalement !!!!
Sur 3 colonnes ?
Tu comptes le monbre de pays ramené. Tu divises par 3, tu stockes ton résultat.
Tu affiches tes pays, tu comptes, arrivé au 1er tiers, tu change de colonne, idem pour le 2eme tiers.

Tu dois y arriver en travaillant le code déjà fourni par Zeus

par zeus » 01 juil. 2005, 09:14

Ca pourrait être interessant de se pencher sur le sujet ...

Je pense qu'il faut construire un tableau temporaire qui permettra de construire le tableau HTML

Par contre j'ai pas le temps de m'y mettre, désolé :oops:

par laTulipe » 30 juin 2005, 18:36

en fait, c'est tres bien mais je voudrais les classer par ordre alphabetique du haut vers le bas et pas horizontalement !!!!

par laTulipe » 30 juin 2005, 18:03

j'aime bien ton truc

merci zeus

par zeus » 30 juin 2005, 17:22

Je pense que ton code est friable si tu as un nombre de pays n'est pas un multiple de 3, surtout que tu utilise 0.66 au lieu de 2/3 (0.6666666...)

Je te conseille celui là qui est plus conventionnel et sécurisé
<?php
$query="select pays from pays";
$result=mysql_query($query,$link);

$i = 1;
?>
<table>
<?php
while ($a_result = mysql_fetch_array($result)) {
    if ($i == 1)
        echo "\t<tr>\n";
    echo "\t\t<td>".$a_result["pays"]."</td>\n";
    if ($i == 3) {
        echo "\t</tr>\n";
        $i = 1;
    } else
        $i++;
}
mysql_free_result($result);
?>
</table>

par laTulipe » 30 juin 2005, 17:16

effectivement l'ID ne servait à rien, donc pas lapeine de reindexer.

voici mon code pour afficher sur 3 colonnes
		$query="select pays from pays";
		$result=mysql_query($query,$link);
		$nbLignes=mysql_num_rows($result);
		echo "<table>\n<tr>\n<td>";
		for ($i=0;$i<($nbLignes/3);$i++){
			echo mysql_result($result,$i);
			echo "<br />";
		}
		echo "</td>\n<td>";
		for ($i=($nbLignes/3);($i<$nbLignes*0.66);$i++){
			echo mysql_result($result,$i);
			echo "<br />";		
		}
		echo "</td>\n<td>";
		for ($i=($nbLignes*0.66);($i<$nbLignes);$i++){
			echo mysql_result($result,$i);
			echo "<br />";		
		}
		echo "</td></tr></table>";
		mysql_free_result($result);

par mere-teresa » 30 juin 2005, 15:40

Réindexer, c'est se casser la tête pour pas grand chose.

Si tu veux classer dans l'ordre : tu peux encore le faire, même avec des trous entre les numéros.

As-tu vraiment une bonne raison de vouloir que ces chiffres se suivent ?

Re: reindexation

par Augure » 30 juin 2005, 15:39

bonjour,

j'ai un champ ID(int, auto increment, cle primaire) dans une table. suite a divers ajout et suppression, il y a des trous entre chaque ligne (on passe de 2 a 7 par ex).

ya t'il une commande qui permet de reindexer pour combler ces trous?????
sinon c'est possible de reindexer ou pas?
On suppose que ta table ce nomme T

Code : Tout sélectionner

Create table T_tmp ( ID int , ... (les autres colonnes) .... ) ; Insert T_tmp Select * from T Drop table T; Create table T_tmp ( ID int auto increment primary key, ... (les autres colonnes) .... ) ; Insert T ( .... toutes les colonnes sauf ID .... ) Select ( .... toutes les colonnes sauf ID .... ) from T;
Il faut aussi gérer les clé étrangers pointant sur T .... et ça c'est encore plus lourd !!!!

C'est à mon avis une mauvaise idée que de vouloir re indexer

PS : Dans mes équipes de développement j'interdis toujours la mise à jour des clé primaire.
PS : Si tu veux avoir un code "sans trou" je te conseille :

Code : Tout sélectionner

create table T ( ID int auto increment primary key , CODE int , ....) ;
Tu pourras faire toutes les mises à jour sur CODE que tu veux sans mettre en péril l'intégrité relationelle de ta base. Cependant bon courage pour tes utilisateurs qui verront les code changer parfois

par zeus » 30 juin 2005, 15:24

Je crois, je vais chercher.

Mais pourquoi est-ce que tu as besoin de l'index pour afficher ta table ? :shock:

par laTulipe » 30 juin 2005, 15:23

je suis en train de chercher une solution pour afficher sur 3 colonnes une liste de pays provenant d'une table (ID, nom_pays).

c'est surement pas une bonne methode d'utiliser l'ID, comme tu l'as dit ya des pb de jointures. vais voir si je trouve autre chose.

sinon c'est possible de reindexer ou pas?

par zeus » 30 juin 2005, 15:13

C'est un sujet qui ammene souvent des débats :

Je commencerais donc par te demander pourquoi est-ce que tu veux faire ça ?

selon moi, une fois qu'une ligne dispose d'un index, il ne faut pas le modifier. En effet, si tu as dans l'avenir des tables qui comportent des clés étrangères vers cette table et que tu réindexe ta table, tu perds les relations