पहले तीन परिणामों को अलग-अलग मानों (1 से 3 तक) के साथ कैसे अपडेट करें:

पहले 3 परिणाम प्राप्त करने के लिए प्रश्न:

$top3 = DB::table('quests')
                    ->orderby('score', 'desc') 
                    ->take(3)
                    ->pluck('id'); 

1 से 3 रैंक वाले कॉलम को अपडेट करने की क्वेरी:

DB::table('quests')->whereIn('id', $top3)
                     ->first()->update(['rank', 1])
                     ->second()->update(['rank', 2])
                     ->third()->update(['rank', 3]);
              //of course the above updates are from my imagination :)
              //just trying to describe what I'm trying to do
0
Abdallah Sakre 5 सितंबर 2019, 20:33

1 उत्तर

सबसे बढ़िया उत्तर

आपकी दूसरी क्वेरी बेमानी है; तालिका को फिर से क्वेरी करने के लिए ids के लिए क्वेरी करने का कोई कारण नहीं है। यह सब एक प्रश्न/लूप में करें:

$top3 = Quest::orderBy("score", "DESC")->take(3)->get();
foreach($top3 AS $index => $quest){
  $quest->rank = $index+1;
  $quest->save();
}

नोट: यह मानता है कि आपके पास एक Quest मॉडल है; अभी भी DB::table() के साथ काम करेगा, लेकिन अगर आप लारवेल का उपयोग कर रहे हैं, तो मॉडल का उपयोग करें।

उपरोक्त 3 रिकॉर्ड को एक ही क्वेरी में लाएगा, ऑर्डरिंग और लिमिटिंग को ठीक से संभालना, फिर लूपिंग और रैंक असाइन करना (0-आधारित $index, प्रत्येक लूप पर इंक्रीमेंट, हैंडल में 1 जोड़ना)

1
Tim Lewis 5 सितंबर 2019, 17:49