2012-04-09 13 views
11

मैं पूरी तरह से एसक्यूएल के लिए नया हूं और खुद ऐसा नहीं कर सकता। इसलिए, मुझे आपकी मदद की आवश्यकता है। मैं कॉलम में मानों को क्रमबद्ध करना चाहता हूं और फिर परिवर्तनों को सहेजना चाहता हूं। लेकिन मुझे नहीं पता कि यह कैसे करना है।स्तंभों और अद्यतन तालिका में मानों को कैसे क्रमबद्ध करें?

टेबल कि तरह लग रहा है:

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

तो मैं "id" और "नाम" कॉलम क्रमित की जरूरत है:

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

मैं ऐसा ही कुछ करना चाहते हैं।

मैं निम्नलिखित का उपयोग बयान "नाम" कॉलम के मूल्यों को सॉर्ट करने:

SELECT * FROM games ORDER BY name ASC 

लेकिन मैं आईडी स्तंभ के मूल्यों कैसे सॉर्ट और तालिका में परिवर्तनों को सहेजने के कर सकते हैं? कृपया, सहायता करें।

+3

जब आप आम तौर पर सॉर्ट करते हैं तो डेटा डेटा नहीं बदलते हैं, डेटा टेबल को किसी विशेष क्रम में डेटा वापस करने के लिए कभी भी गर्नेट नहीं किया जाता है। – HLGEM

+2

आप डेटाबेस टेबल को क्रमबद्ध क्यों सहेजना चाहते हैं? – MarioDS

+0

@MarioDeSchaepmeester यह एक लंबा इतिहास है। संक्षेप में मुझे अपने आवेदन के लिए इसकी ज़रूरत है। – Sabre

उत्तर

17

आप एक दूसरी तालिका

  1. अपने games तालिका के रूप में एक ही संरचना के साथ एक नई तालिका games2 बनाने का उपयोग करना होगा आईडी ऑटो incrementing है

    CREATE TABLE `games2` LIKE `games`; 
    
  2. सुनिश्चित करते हुए कॉपी डेटा को छांटा, games2

    INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name` 
    
  3. ड्रॉप में या पुराने तालिका के लिए कदम

    -- DROP TABLE `games`; 
    -- or 
    RENAME TABLE `games` TO `games1`; 
    
  4. पुराने नाम

    RENAME TABLE `games2` TO `games`; 
    

ये कदम तुम क्या चाहते का परिणाम देगा के लिए नई तालिका नाम बदलें।

+3

अपडेट किया है यह बहुत अच्छा है। मदद के लिए आपका बहुत बहुत धन्यवाद! – Sabre

+0

@Sabre और छाता तालिका implemenaton/भंडारण आदेश है, लेकिन एक मेज एक unordered abstraction है। किसी प्रश्न में आदेश प्राप्त करने का एकमात्र तरीका एक बाहरी आदेश है। – philipxy

0

आप एक ही समय में दो फ़ील्ड क्रमबद्ध कर सकते हैं।

SELECT * 
FROM games 
ORDER BY id DESC, name ASC 

मुझे समझ में नहीं आता कि तालिका में बदलावों को सहेजकर आपका क्या मतलब है। ORDER BY, बस उस डिस्प्ले को बदल रहा है जिसे आप देख रहे हैं, यह तब तक तालिका में डेटा नहीं बदलता जब तक आप UPDATE नहीं करते।

SQL Course

Beginner SQL Tutorial

SQL Tutorial - Learn SQL

संपादित करें टिप्पणी के आधार पर, हो सकता है:

आप एसक्यूएल से अपरिचित हैं, वहाँ ट्यूटोरियल ऑनलाइन का एक बहुत मदद कर सकते हैं कर रहे हैं एक चरण में किया गया:

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

आप जो कह रहे हैं वह सही है, लेकिन ध्यान दें कि वह अपने उदाहरण में क्या करना चाहता है - 'आईडी' कॉलम वही रहता है। – cha0site

+0

मेरा मतलब अद्यतन था। क्या मै वह कर सकता हूं? – Sabre

+0

@ cha0site आप सही हैं। जब मैं दो फ़ील्ड को इस तरह से सॉर्ट करता हूं तो मुझे तालिका – Sabre

4

आप पंक्तियों को पुनर्निर्मित करने के लिए ROW_NUMBER रैंकिंग फ़ंक्शन का उपयोग कर सकते हैं।

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

धन्यवाद, यह मेरे लिए भी सहायक है। – Sabre

-2

एसक्यूएल> चुनें * खेल से ID द्वारा आदेश, नाम;

+1

क्या आप अपने समाधान को आपके द्वारा प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर विस्तारित कर सकते हैं? – abarisone

+0

यह कैसे अपडेट हो रहा है? – lU5er

0

यह आसान है। बस कुछ कोड का प्रयोग करें। मैंने कोशिश की है और यह काम कर रहा है। पहले एक ही समय में मूल्यों को क्रमबद्ध करते समय एक अस्थायी तालिका बनाएं।

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

और उसके बाद का उपयोग कर खेल तालिका ड्रॉप,

drop table games; 

अब एक ही गुण और नए में के रूप में डेटा (जहां यहाँ छँटाई एक वैकल्पिक है) का उपयोग कर के साथ फिर से खेल तालिका बनाने,

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

अब अस्थायी तालिका 'नए'

drop table new; 
ड्रॉप

अब अपनी तालिका की जांच करें। इसे हल किया जाना चाहिए।

1

आप वैकल्पिक तालिका कमांड का उपयोग कर सकते हैं जो सरल है।

mysql> ALTER TABLE games ORDER BY name asc; 

यह सब कुछ है!

संबंधित मुद्दे