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

क्या Sequelize.js के साथ सबक्वेरी करना संभव है?

मुझे नहीं लगता कि आपके प्रश्न का स्पष्ट उत्तर संभव है। देखें #1869 :

शीर्षक प्रश्न का उत्तर देने के लिए, Sequelize स्वचालित रूप से एक सबक्वेरी उत्पन्न करेगा (उदाहरण के लिए, #1719 ), लेकिन आप एक कस्टम सबक्वेरी नहीं कर सकते। मेरे पास नकारात्मक के लिए आधिकारिक संदर्भ नहीं है।

ऐसा लगता है कि आपकी टेबल कुछ इस तरह है:

EssayStats
    EssayId
    EssayDate
    WordCount

तब आप कुछ ऐसा कर सकते थे:

return EssayStat.findAll({
    attributes: [
        [sequelize.literal('((SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" DESC LIMIT 1) - (SELECT wordCount FROM "EssayStats" WHERE "EssayId" = "EssayStat"."EssayId" EssayStat BY "createdAt" ASC LIMIT 1))'), 'difference'],
        'EssayId'
    ],
    group: ['EssayId']
});

यह जो कुछ भी कर रहा है वह दो SELECT क्वेरीज़ चला रहा है, उन प्रश्नों से MAX और MIN को अपनी रुचि के चर द्वारा ऑर्डर करने के बाद, और फिर अपना अंतर ले रहा है। इससे आपको वह मिलेगा जिसमें आप रुचि रखते हैं:सबसे हाल के संस्करण और पहले संस्करण के बीच शब्द गणना का अंतर।

यहाँ ट्रिक एक विशेषता फ़ील्ड में एक SELECT स्टेटमेंट को इनकैप्सुलेट करना है।

बेशक, यह बिल्ली के रूप में गन्दा है और शायद डिब्बाबंद sequelize.query से ज्यादा बेहतर नहीं है . लेकिन यह आपके प्रश्न के सार का उत्तर देता है।

एक बेहतर उपाय यह हो सकता है कि आप अपने डेटा को कुछ सामान्य करें, और "वर्डकाउंटडेल्टा" को सीधे अपने निबंध मॉडल में स्टोर करें। तब आपके पास afterCreate . हो सकता है हुक फ़ील्ड को स्वचालित रूप से अपडेट करने के लिए। यह संभवतः सबसे तेज़ समाधान भी होगा।

मैंने कुछ इसी तरह का उत्तर दिया यहां



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MYSQL SET लूप के दौरान त्रुटि देता है

  2. केवल अधिकतम मान सहित sql/mysql फ़िल्टर

  3. सप्ताह () उदाहरण – MySQL

  4. MySQL चयन के रूप में तालिका बनाएँ

  5. MySQL ट्रिगर इन्सर्ट/अपडेट इवेंट्स पर