2016-03-08 5 views
2

J'ai une table où il y a une colonne nommée uid, Elle utilise Autoincrement et sa mise à jour avec 1,2,3 etc Maintenant, j'ai cron travail qui a supprimé les lignes de plus de 2 jours.Alors mon colonne uid est 2345 à n..I veulent le remettre à 1 à n again.I essayé ci-dessous le codeMettre à jour la colonne entière avec 1 à n

UPDATE `tv` SET `uid` = '' 

Je pensais à boucle à travers toutes les lignes et uid de mise à jour via le script php, y at-il d'autre alternative avec une seule commande SQL?

+0

@ lad2025: Salut s'il vous plaît enlever le double, ce n'est pas la solution à ma question – Vishnu

Répondre

2

Vous pouvez essayer quelque chose comme ceci:

UPDATE `tv` t 
set t.`uid` = (SELECT count(*) 
       from `tv` s 
       WHERE t.`uid` >= s.`uid`) 

Cela compte le nombre de uid sont là qui sont inférieures ou égales alors celui mis à jour, de sorte que lorsque le premier UID, permet de dire que 2345 est mis à jour, il y a seulement 1 uid qui est plus petit/égal à lui donc il obtiendra la valeur 1 et ainsi de suite ...

EDIT: Essayez this-

UPDATE `tv` t 
INNER JOIN(SELECT s.`uid`,count(*) as cnt 
      from `tv` s 
      INNER JOIN `tv` ss 
      ON(s.`uid` >= ss.`uid`) 
      GROUP BY s.`uid) tt 
ON(t.`uid`=tt.`uid`) 
SET t.`uid` = tt.cnt 
+0

je reçois cette erreur - Vous ne pouvez pas spécifier la table cible « t » pour la mise à jour dans la clause FROM – Vishnu

+0

Vous avez une erreur dans votre Syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'uid' = s.'uid') SET t.'uid' = tt.cnt' à la ligne 6 – Vishnu

+0

Argh, une faute de frappe .. maintenant: P @Vishnu – sagi

1

Pourquoi ne pas réduire la uid par:

update tv set uid = uid -1 
+0

qu'est-ce que tu veux dire, il va réduire 2345 à 2344? quand il n'y a que 400 lignes, je voulais seulement 1 à 400 comme uid – Vishnu