2010-12-15 3 views
0

J'ai une table avec id primaire
1 Simer
2 Pawan
3 profonde
4 moutons
5 homme
je veux inverser cet ordre
5 Simer
4 Pawan
3 profonde
2 moutons
1 homme
renversement ids dans le tableau sql

comment puis-je faire cela avec la programmation ou sql? je ne veux pas utiliser commande par SQL

+3

Pourquoi? Pourquoi? Pourquoi voudriez-vous changer l'ordre de la clé primaire ??? – Mchl

+0

Bonne question .. –

+2

Pourquoi ne voulez-vous pas utiliser l'opération ORDER BY? – Beaker

Répondre

2

Soit:

1) Sélectionner toutes les lignes commandées par id en ordre descendant, puis les insérer dans une nouvelle table dans l'ordre croissant, et AUTO_INCREMENT attribuera de cette table les identifiants dans l'ordre inverse. Vous pouvez maintenant copier ces lignes dans la table d'origine avec leurs nouveaux identifiants.

2) Sélectionner toutes les lignes commandées par identifiant par ordre décroissant dans un programme, les supprimer et les remettre en place les nouveaux ID:

$sql = "SELECT id, name FROM table ORDER BY id DESC"; 
$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) { 
    $rows[] = $row; 
} 

//empty the table, to avoid primary key conflicts 
mysql_query("TRUNCATE TABLE table");  

$i = 1; 
foreach ($rows as $row) { 
    mysql_query("INSERT INTO table (id, name) VALUES ($i, '" . mysql_real_escape_string($row['name']) . ")"); 
    $i++; 
} 
+0

Votre réponse résoudra correctement le problème, attendant juste une approche différente à venir s'il y en a. –

0

je ne veux pas utiliser commande par SQL

Mais c'est exactement la raison pour laquelle SQL fournit la clause ORDER BY. Voulez-vous simplement inverser l'ordre des données actuelles ou voulez-vous que votre système affecte des numéros de séquence décroissants à de nouveaux enregistrements?

L'ancien serait une condition préalable à ce dernier si ....

UPDATE yourtable SET id=(4294967295-id); 

Notez que si vous pouvez contrôler le montant par lequel chaque nouvelle valeur autoincrement est différente de la précédente (en spécifiant le auto_increment_increment), le simple paramétrage de -1 ne résoudrait pas le problème car la valeur de base à laquelle ce delta est appliqué est SELECT MAX (id) FROM yourtable - donc même si mysql vous permettait de spécifier un auto_increment_increment de -1, vous finiriez par Avec des lignes dupliquées, vous devrez donc répliquer toutes les références aux types auto_increment dans votre schéma avec des entiers droits et utiliser un générateur de séquence à la place. Ensuite, vous devrez réécrire tout votre code pour utiliser le générateur de séquence au lieu de INSERT_ID()/mysql_insert_id().

Ne serait-il pas plus simple d'utiliser ORDER BY?

+0

désolé, mais je ne comprends pas votre réponse :) –

+0

mais merci de répondre –

Questions connexes