Pergunta

Eu tenho uma tabela como a seguinte,

| id  | name   | color  |
------+--------+---------
| 1   | pear   | green  |
| 2   | apple  | red    |
| 3   | banana | yellow |
| 4   | grape  | purple |

Eu gostaria de reordenar em ordem alfabética usando a coluna "nome" e redefinir o id (autoincrement) com este novo fim de acabar com o seguinte

| id  | name   | color  |
------+--------+---------
| 1   | apple  | red    |
| 2   | banana | yellow |
| 3   | grape  | purple |
| 4   | pear   | green  |

Pergunta : como eu posso fazer isso com o MySQL

Foi útil?

Solução

Posso perguntar por que você iria querer fazer isso?

Se alguém modifica quaisquer dos valores de nome ou inserções novas linhas que vai atrapalhar o seu esquema de ordenação. Tentando armazenar algum significado no ordenamento do PK que já está disponível em outros lugares na tabela (a coluna nome) parece redundante e consequentemente uma má idéia.

Uma solução muito melhor é não se preocupar com o valor da coluna ID e apenas uma espécie na coluna de nome quando você usar os dados em seu aplicativo.

PS: Desculpe pela resposta do tipo não-resposta. Normalmente eu supor que você tinha um bom motivo e apenas dar uma resposta que diretamente endereços que você está tentando fazer, mas eu notei de suas outras perguntas que você ainda está nos estágios iniciais de aprendizagem sobre o projeto de banco de dados, então eu queria ajuda apontá-lo na direção certa em vez de ajudar ainda mais o seu progresso em direção a uma abordagem mal aconselhado.

Outras dicas

A maneira mais limpa para repor o auto incremento é criar outra tabela.

MySQL fornece comandos como CREATE TABLE LIKE e RENAME TABLE que são úteis.

CREATE TABLE table2 LIKE table1;

INSERT INTO table2
  SELECT * FROM table1 ORDER BY name;

DROP TABLE table1;

RENAME TABLE table2 TO table1;

Você pode SELECT INTO uma nova tabela a partir da tabela antiga, ordenando a sua escolha em como desejado. Possui uma ID auto-incremento na nova tabela. Se necessário, soltar a tabela antiga e renomeie a nova tabela.

Por que não acrescentar "ORDER BY nome ASC" no final da sua consulta? Meu palpite seria que você precisa do ID por algum motivo.

 SELECT
       RANK() Over (ORDER BY Name) As NewID
     , Name
     , Color

 FROM Fruits

poderia salvar em uma tabela temporária, em seguida, truncar, em seguida, truncar a tabela frutas e inserção, mas é provavelmente uma soluções de baixa qualidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top