2012-04-09 6 views
11

Sono completamente nuovo in SQL e non posso farlo da solo. Quindi ho bisogno del tuo aiuto. Voglio ordinare i valori nella colonna e quindi salvare le modifiche. Ma non so come farlo.Come ordinare i valori nelle colonne e nella tabella degli aggiornamenti?

Tabella sembra che:

Id | Name | SomeDescription 
--------------------------- 
1 |Best | Description1 
2 |Worth | Description2 
3 |Good | Description3 

voglio ottenere qualcosa di simile:

Id | Name | SomeDescription 
--------------------------- 
1 |Best | Description1 
2 |Good | Description3 
3 |Worth | Description2 

quindi ho bisogno di ordinare "id" e le colonne "Nome".

Io uso seguente dichiarazione di ordinare valori della colonna "Nome":

SELECT * FROM games ORDER BY name ASC 

Ma come posso ordinare i valori della colonna ID e salvare le modifiche nella tabella? Per favore, aiuto.

+3

Non modificare i dati quando si ordina in genere, le tabelle di dati non vengono mai contrassegnate per restituire i dati in un ordine particolare. – HLGEM

+2

Perché si desidera salvare le tabelle del database ordinate? – MarioDS

+0

@MarioDeSchaepmeester È una lunga storia. In breve ne ho bisogno per la mia applicazione. – Sabre

risposta

17

Si dovrà utilizzare una seconda tabella

  1. creare una nuova tabella games2 con la stessa struttura di vostro tavolo games, assicurandosi che l'ID viene incremento automatico

    CREATE TABLE `games2` LIKE `games`; 
    
  2. copiare il dati, ordinato, in games2

    INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name` 
    
  3. goccia o spostare la vecchia tabella

    -- DROP TABLE `games`; 
    -- or 
    RENAME TABLE `games` TO `games1`; 
    
  4. rinominare nuova tabella al vecchio nome

    RENAME TABLE `games2` TO `games`; 
    

Questi passaggi si tradurrà in ciò che si desidera.

+3

È grandioso. Grazie mille per il tuo aiuto! – Sabre

+0

@Sabre & Umbrella L'implementazione della tabella/archiviazione ha un ordine ma una tabella è un'astrazione non ordinata. L'unico modo per ottenere sempre l'ordine in una query è un ORDER BY più esterno. – philipxy

0

è possibile ordinare su due campi allo stesso tempo.

SELECT * 
FROM games 
ORDER BY id DESC, name ASC 

Non capisco cosa intendi per salvare i cambiamenti nella tabella. Lo ORDER BY, sta semplicemente cambiando il display che si sta guardando non cambia i dati nella tabella a meno che non si esegua uno UPDATE.

Se si ha familiarità con SQL, ci sono un sacco di tutorial online che può aiutare:

SQL Course

Beginner SQL Tutorial

SQL Tutorial - Learn SQL

Modifica sulla base dei commenti, questo può essere fatto in un solo passaggio:

create table #temp 
(
    id int, 
    name varchar(50), 
    somedesc varchar(50) 
) 

insert into #temp values (1, 'best', 'desc1') 
insert into #temp values (2, 'worth', 'desc2') 
insert into #temp values (3, 'good', 'desc3') 

update t1 
SET t1.id = t2.rn 
    , t1.somedesc = t1.somedesc 
FROM #temp t1 
JOIN 
(
    select id, name, somedesc, row_number() over(order by name, id) as rn 
    from #temp 
) t2 
on t1.id = t2.id 

select * 
from #temp 
order by id 

drop table #temp 
+0

Quello che stai dicendo è corretto, ovviamente, ma nota cosa vuole fare nel suo esempio: la colonna 'Id' rimane la stessa. – cha0site

+0

Intendevo l'aggiornamento. Posso farlo? – Sabre

+0

@ cha0site hai ragione. Quando ordino due campi in quel modo non ho ottenuto nessuna modifica nella tabella – Sabre

4

È possibile utilizzare la funzione di classificazione ROW_NUMBER per rinumerare le righe.

SELECT UnsortedId = id 
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id) 
FROM games 
+0

Grazie, è utile anche per me. – Sabre

-2

SQL> SELECT * FROM giochi Ordina per ID, NOME;

+1

Potresti per favore elaborare più la tua risposta aggiungendo un po 'più di descrizione della soluzione che fornisci? – abarisone

+0

Come viene aggiornato? – lU5er

0

è semplice. usa solo alcuni codici Ho provato questo e sta funzionando. per prima cosa crea una tabella temporanea mentre ordina i valori allo stesso tempo.

create table new as select * from games order by name; 

e quindi eliminare la tabella giochi utilizzando,

drop table games; 

ora creare nuovo tavolo da gioco con le stesse proprietà e dati come nella nuova (in cui l'ordinamento qui è un optional) che utilizzano,

create table games as select * from new order by name; 

ora rilasciare la tabella temporanea 'new'

drop table new; 

ora controlla il tuo tavolo. deve essere risolto.

1

È possibile utilizzare il comando alter table che è più semplice.

mysql> ALTER TABLE games ORDER BY name asc; 

Questo è tutto!

Problemi correlati