मैंने हाल ही में इस समस्या में भाग लिया है। समस्या ठीक करने के लिए दो भागों था।
$subQuery = DB::raw("(SELECT id FROM titles WHERE id BETWEEN {$startId} AND {$endId} ORDER BY title) as t");
तो मैं इस्तेमाल कर सकते हैं कि के रूप में अपने प्रश्न का हिस्सा से:
'titles.id',
'title_eisbns_concat.eisbns_concat',
'titles.pub_symbol',
'titles.title',
'titles.subtitle',
'titles.contributor1',
'titles.publisher',
'titles.epub_date',
'titles.ebook_price',
'publisher_licenses.id as pub_license_id',
'license_types.shortname',
$coversQuery
)
->from($subQuery)
->leftJoin('titles', 't.id', '=', 'titles.id')
->leftJoin('organizations', 'organizations.symbol', '=', 'titles.pub_symbol')
->leftJoin('title_eisbns_concat', 'titles.id', '=', 'title_eisbns_concat.title_id')
->leftJoin('publisher_licenses', 'publisher_licenses.org_id', '=', 'organizations.id')
->leftJoin('license_types', 'license_types.id', '=', 'publisher_licenses.license_type_id')
सबसे पहले मैं अपने FROM खंड की है कि मेरी सीमित और केवल प्राथमिक कुंजी पर मेरे लिए offsetting किया में एक आंतरिक चयन का इस्तेमाल करना पड़ा
पहली बार मैंने यह प्रश्न बनाया था, मैंने MySQL में ऑफ़सेट और LIMIT का उपयोग किया था। यह ठीक काम करता है जब तक कि मुझे पिछले पृष्ठ 100 प्राप्त नहीं हुआ तब ऑफसेट असहनीय रूप से धीमा हो गया। मेरी आंतरिक पूछताछ में इसे बदलने के लिए इसे किसी भी पेज के लिए बढ़ा दिया गया। मुझे यकीन नहीं है कि MySQL ने ऑफ़सेट क्यों नहीं किया है, लेकिन लगता है कि इसे वापस फिर से रील करना है।
यह दृष्टिकोण केवल चुनिंदा वक्तव्यों में काम करता है जिसमें स्थिति नहीं है। मेरी राय में यह एक अच्छा समाधान नहीं है। –
इस सूचकांक तालिका को अद्यतन कैसे रखें? मेरे मामले में, मुझे डेटाटाइम कॉलम द्वारा ऑर्डर करना होगा और धीमी क्वेरी के परिणामस्वरूप बड़े ऑफसेट का उपयोग करना होगा। अगर मैं यह suport तालिका बना देता हूं, तो मुझे प्रत्येक बार एक नई तारीख फिर से डालने की आवश्यकता होगी, क्योंकि यह क्रम में नहीं आया है। मैं पहले से ही इस समाधान को देखता हूं, लेकिन अस्थायी तालिकाओं के साथ। –