MySQL 5.6 में SQL मोड ONLY_FULL_GROUP_BY सेट करना संभव है, लेकिन यह डिफ़ॉल्ट रूप से सेट नहीं है (देखें https://dev.mysql.com/doc/refman/5.6/hi/sql-mode.html )
आह, मुझे आपकी टिप्पणी ऊपर दिखाई दे रही है, आपने पुष्टि की है कि ONLY_FULL_GROUP_BY आपके स्थानीय सर्वर (MySQL 5.7) पर सेट है।
मुझे लगता है कि आपने अपने समस्या विवरण में कुछ गलत बताया है। यदि स्थानीय में ONLY_FULL_GROUP_BY है और लाइव नहीं है, तो आपको अपने स्थानीय सर्वर पर त्रुटि मिलनी चाहिए, लेकिन लाइव सर्वर पर नहीं।
मेरा सुझाव है कि आप विकास में उसी संस्करण का उपयोग करना सुनिश्चित करें जिसका उपयोग आप उत्पादन में करते हैं, और उसी SQL मोड से भी मेल खाते हैं। यह विकास के दौरान भ्रम को रोकेगा।
मैं PHP के संस्करण के बारे में एक ही सुझाव देता हूं। यदि आप विकास में कुछ नई PHP 7 सुविधाओं का उपयोग करते हैं, और फिर अपने PHP 5.6 लाइव सर्वर पर तैनात करते हैं, तो वे काम नहीं करेंगे।
आपके द्वारा वर्णित SQL ठीक होना चाहिए:
select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE
यह वास्तव में ठीक है, भले ही आपके पास ONLY_FULL_GROUP_BY हो। select count(*)
. करना निश्चित रूप से कानूनी है तालिका में सभी मिलान पंक्तियों में से। इस क्वेरी के लिए आपको ग्रुप बाय क्लॉज की आवश्यकता नहीं है।
लेकिन अगर आप समेकित कॉलम को गैर-एकत्रित कॉलम के साथ मिलाते हैं, तो आप ONLY_FULL_GROUP_BY आवश्यकताओं का उल्लंघन करेंगे, क्योंकि गैर-एकत्रित कॉलम अस्पष्ट होंगे।
select id, count(*) as aggregate from ...
मुझे आश्चर्य है कि क्वेरी तैयार करने से पहले लारवेल आपकी चयन-सूची में अतिरिक्त कॉलम डाल रहा है या नहीं। सुनिश्चित करने के लिए आपको MySQL क्वेरी लॉग को सक्षम करना होगा।
मैंने देखा है कि लारवेल मुद्दों पर इस त्रुटि के बारे में कुछ चर्चा है:https://github.com /लारवेल/फ्रेमवर्क/मुद्दों/15232
समाधान उस थ्रेड में कई उपयोगकर्ताओं ने कहा कि समस्या को ठीक करता है 'strict'=>false
. सेट करना है अपने Laravel config/database.php में।
लेकिन मैं शर्त लगा सकता हूं कि मूल कारण यह है कि Laravel आपकी SQL क्वेरी को संशोधित कर रहा है।