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

यादृच्छिक 2 शब्द स्ट्रिंग के साथ तालिका में प्रत्येक पंक्ति का नामकरण

ऐसा लगता है कि आप बेतरतीब ढंग से चुने गए शब्दों . की एक जोड़ी चाहते हैं एक शब्दकोश . से . प्रश्न की स्पष्टता की कमी को देखते हुए यह बताना कठिन है।

रैंडम डिक्शनरी शब्द

यादृच्छिक शब्दकोश शब्दों को चुनने का सबसे अच्छा तरीका शायद एक पास-वाक्यांश जनरेटर का उपयोग करके PHP के अंत में है जो इसे आपके लिए करता है।

आप इसे PostgreSQL में एक तालिका dictionary . का उपयोग करके कर सकते हैं एक word . के साथ प्रति पंक्ति, हालांकि:

SELECT word FROM dictionary ORDER BY random() LIMIT 2;

एक बड़े शब्दकोश के साथ प्रदर्शन वास्तव में भयानक होगा। यह बहुत तेजी से किया जा सकता है यदि शब्दकोश नहीं बदलता है और एक अद्वितीय word_id है नंबरिंग में कोई अंतराल नहीं है, जिससे आप लिख सकते हैं:

CREATE OR REPLACE FUNCTION get_random_word() RETURNS text AS $$
SELECT word FROM dictionary 
WHERE word_id = (
  SELECT width_bucket(random(), 0, 1, (SELECT max(word_id) FROM dictionary))
);
$$ LANGUAGE sql;

SELECT get_random_word() || ' ' || get_random_word();

इस तरह की तालिका के सामने:

CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);

यह केवल तभी सुसंगत परिणाम देगा जब शब्द क्रमांकन में कोई अंतराल न हो और यदि word_id अद्वितीय है या PRIMARY KEY . है . यह कर सकता है एक ही शब्द को दो बार उत्पन्न करें। यदि आप इससे बचना चाहते हैं तो आपको एक पुनरावर्ती CTE या कुछ PL/PgSQL की आवश्यकता होगी।

रैंडम जिबरिश

यदि आप वास्तव में वास्तव में यादृच्छिक तार चाहते हैं, तो यह पहले से ही यहां स्टैक ओवरफ़्लो पर अच्छी तरह से कवर किया गया है। देखें आप एक रैंडम कैसे बनाते हैं स्ट्रिंग जो PostgreSQL में सत्र आईडी के लिए उपयुक्त है? दूसरों के बीच में; इस खोज को देखें ।

अद्वितीयता सुनिश्चित करने के लिए, बस एक UNIQUE add जोड़ें बाधा यह देखने के लिए अपने आवेदन का परीक्षण करवाएं कि क्या आपके द्वारा INSERT . के दौरान एक अद्वितीय_उल्लंघन उठाया गया था पंक्ति संपादित करें, और उल्लंघन होने पर इसे एक नई यादृच्छिक आईडी के साथ डालें। यदि आप चाहें तो आप इसे PL/PgSQL सहायक प्रक्रिया के साथ स्वचालित कर सकते हैं, हालांकि यह अभी भी विभिन्न लेनदेन में समवर्ती प्रविष्टियों के बीच दौड़ के अधीन होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल में Postgresql पर तैयार वक्तव्य

  2. एकाधिक डेटाबेस पर लेनदेन का प्रबंधन कैसे करें

  3. डेटाबेस में अपडेट के बाद रेल कोड चलाएँ, बिना after_commit

  4. रेक कार्य डेटाबेस.yml कॉन्फ़िगरेशन को अनदेखा करते प्रतीत होते हैं

  5. peewee का उपयोग करके एकाधिक रिकॉर्ड कैसे अपडेट करें