Domanda

Ho una tabella come la seguente,

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

Mi piacerebbe riordinare in ordine alfabetico utilizzando la colonna "nome" e reimpostare l'ID (autoincrement) con questo nuovo ordine per finire con il seguente

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

DOMANDA :? Come posso fare questo con MySQL

È stato utile?

Soluzione

Posso chiedere perché si vorrebbe fare questo?

Se qualcuno modifica uno dei valori nome o inserisce nuove righe sarà rovinare il vostro schema di ordinazione. Cercando di conservare un senso nell'ordinamento del PK che è già disponibili altrove nella tabella (la colonna nome) sembra ridondante e di conseguenza una cattiva idea.

Una soluzione molto migliore è di non preoccuparsi per il valore della colonna ID e appena sorta sulla colonna di nome quando si utilizzano i dati nel vostro app.

PS: Ci scusiamo per il tipo di risposta non-risposta. Normalmente mi piacerebbe assumere hai avuto una buona ragione e solo dare una risposta che affronta direttamente ciò che si sta cercando di fare, ma ho notato dalle vostre altre domande che si è ancora in fase di apprendimento precoce in merito alla progettazione di database, così ho voluto aiutare il punto è nella giusta direzione, invece di aiutare ulteriormente i progressi verso un approccio mal consigliato.

Altri suggerimenti

Il modo più pulito per ripristinare l'incremento automatico è quello di creare un'altra tabella.

MySQL fornisce comandi come CREATE TABLE LIKE e RENAME TABLE che sono utili.

CREATE TABLE table2 LIKE table1;

INSERT INTO table2
  SELECT * FROM table1 ORDER BY name;

DROP TABLE table1;

RENAME TABLE table2 TO table1;

Puoi SELECT INTO una nuova tabella dalla vecchia tabella, ordinare il vostro selezionare in, se lo desideri. Avere un ID di incremento automatico nella nuova tabella. Se necessario, eliminare la vecchia tabella e rinominare la nuova tabella.

Perché non aggiungere "ORDER BY nome ASC" alla fine della query? La mia ipotesi è che è necessario l'ID per qualche motivo.

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

 FROM Fruits

potrebbe risparmiare ad una tabella temporanea poi tronca poi troncare la tabella di frutta e l'inserto, ma è probabilmente una soluzione scadente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top