PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज:ज्ञात मानों के साथ स्ट्रिंग कॉलम द्वारा ऑर्डर करें

1.अगर आपको पोस्टग्रेज में सिर्फ एक sql की जरूरत है, तो यह है:

select * from events
order by (case state 
          when 'scheduled' then 1
          when 'notified' then 2
          when 'invited' then 3
          when 'started' then 4
          when 'ended' then 5 
          end)    

आप sql में राज्यों के क्रम को बदल सकते हैं, रूबी कोड को बदलने की कोई आवश्यकता नहीं है, sql fiddle खेलें:http://sqlfiddle.com/#!12/976e9/3

2. एमयू के सुझाव में, आप एक एनम प्रकार का उपयोग कर सकते हैं, यह अधिक कुशल है, यदि आपको ऑर्डर बदलने की आवश्यकता है, तो आप एनम को फिर से बना सकते हैं। यह sql fiddle देखें:http://sqlfiddle.com/#!12/f6f3d/2

CREATE TYPE states AS ENUM ('invited', 'scheduled', 'notified', 'started', 'ended');
create table events(
  name varchar(100),
  state states
);

select * from events order by state;

3. शुद्ध रूबी तरीके से, आप हैश को परिभाषित कर सकते हैं:

test_hash = {'scheduled'=>1, 'notified'=>2, 'invited'=>3, 'started'=>4, 'ended'=>5}
Events.all.sort! {|x, y| test_hash[x.state] <=> test_hash[y.state]}

4.लेकिन मेरी राय में, आपको "स्टेट्स" नाम की एक टेबल को "नाम" और "सीक्वेंस" कॉलम के साथ जोड़ना चाहिए, और "सीक्वेंस" में ऑर्डर निर्दिष्ट करना चाहिए। फिर "ईवेंट" और "स्टेट्स" में शामिल हों। जब आप ऑर्डर बदलते हैं, तो आपको कोड बदलने की आवश्यकता नहीं होती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दूसरे वीपीसी से निजी आरडीएस डीबी तक पहुंचें

  2. एकाधिक सम्मिलित तालिकाओं पर कुल कार्य

  3. अजवाइन कार्य अजगर के साथ postgresql डेटाबेस से कई पंक्तियों पर पुनरावृति करने में असमर्थ

  4. तालिका विभाजन को पोस्टग्रेज़ करने के लिए HASH फ़ंक्शन का परीक्षण करें

  5. आस-पास के टाइमस्टैम्प के आधार पर दो तालिकाओं में शामिल हों