2016-03-25 5 views
8

मैं CakePHP 3.x "बुकमेकर ट्यूटोरियल" की कोशिश की और मैं कदम से अनुदेश चरण का पालन किया होता है। दुर्भाग्य से, पहला अध्याय के अंत में मैं संलग्न त्रुटि मिलती है:सिंटेक्स त्रुटि या पहुँच उल्लंघन: चयन सूची के 1055 अभिव्यक्ति # 8 ग्रुप में BY खंड नहीं है और nonaggregated स्तंभ

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #8 of SELECT list 
is not in GROUP BY clause and contains nonaggregated column 'wis.Tags.id' which is not 
functionally dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by 

इसके अलावा, मैं अपने "BookmarksTags" तालिका की जांच करने के बारे में जानकारी प्राप्त, लेकिन मैं पहले एक creat करने के लिए नहीं है। मैं थोड़ा उलझन में हूँ।

Please try correcting the issue for the following table aliases: 

BookmarksTags 

मैं पहले से ही अपनी समस्या का Google हूं और मुझे अतिरिक्त लाइन के साथ "my.cnf" अपडेट करने के लिए जानकारी मिली। मैं पहले से ही कोशिश करता हूं लेकिन कुछ भी खुश नहीं हुआ। मैं वर्तनी की जांच भी करता हूं और जिथब से "बुकमार्कर-ट्यूटोरियल" डाउनलोड करता हूं लेकिन मुझे अभी भी यह त्रुटि मिलती है।

मैं MySQL 5.7.11 और PHP 5.6.14 का उपयोग करता हूं।

उत्तर

17

यह MySQL 5.7 में एक नई बात है और यह एक चेतावनी है कि आपकी क्वेरी संदिग्ध है।

id | name | age | points 
-------------------------------------------- 
1   Bob   21   1 
2   James  14   1 
3   Bob   21   3 
4   James  14   2 
5   Casey  17   3 

आप निम्न क्वेरी किया था, तो:

SELECT name, age, SUM(points) FROM scores GROUP BY name 

फिर name स्तंभ समूह के लिए प्रयोग किया जाता है

निम्न तालिका पर विचार करें। ध्यान दें कि age में कई मान हो सकते हैं, इसलिए यह "गैर-समेकित" है। आपको उन मूल्यों को ध्वस्त करने के लिए कुछ करने की ज़रूरत है। हालांकि यह कभी कभी अप्रत्याशित था और असफल होता

5.6 में और पिछले व्यवहार, बस सॉर्ट क्रम के आधार पर पहले एक लेने के लिए किया गया था। 5.7 में वे आपको इसे पहले स्थान पर करने से रोक रहे हैं।

यहाँ समाधान के साथ-साथ उस पर समूह के लिए है, या यह करने के लिए MIN() की तरह एक समग्र ऑपरेटर लागू करने के लिए।

+0

क्या सॉर्ट ऑर्डर के बावजूद पहले व्यक्ति को पाने का कोई तरीका है? – rotaercz

+0

@rotaercz "पहली" की अवधारणा को सॉर्ट किए बिना व्यर्थ है। – tadman

+0

मेरा मतलब यह है कि, पंक्तियों को ध्यान में रखते हुए कोई तरीका है? ग्रुप द्वारा MySQL 5.7 से पहले मेरे पास ठीक काम करने के लिए उपयोग किया जाता था। यह अस्पष्टता से निपट नहीं पाया और कई परिस्थितियों में इससे कोई फर्क नहीं पड़ता कि क्या हासिल किया जा रहा था। – rotaercz

1

बस एक ही समस्या पर ठोकर खाई।
क्वेरी को बदलने config/app.php में sql_mode पुनर्स्थापित करने के लिए हो सकता है बिना ट्यूटोरियल "काम" बनाने के लिए एक आसान तरीका:

'Datasources' => [ 
    'default' => [ 
     'className' => 'Cake\Database\Connection', 
     'driver' => 'Cake\Database\Driver\Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     ... 
     'init' => ["SET sql_mode = ''"], 
    ], 

हालांकि यह चीजें काम में आता है चाहिए, यह शायद वास्तविक जीवन मामलों में अनुशंसित नहीं है।

4

मैं लैरवेल 5.4 का उपयोग कर रहा हूं और एक ही समस्या का सामना कर रहा हूं।
मैं strictfalse पर config/database.php पर सेट करने का प्रयास करता हूं और यह काम करता है।

'connections' => [ 
    'mysql' => [ 
     'strict' => false, 
    ] 
] 

हालांकि यह एसक्यूएल क्वेरी संपादित करने के लिए बेहतर है की तुलना में दबाने यह चेतावनी है।

0

यह MySQL के नए संस्करण से संबंधित समस्या हो सकती है जैसा कि आपने कहा था कि आप MySQL 5.7 का उपयोग कर रहे हैं।11 तो इस समस्या को हल करने के लिए अपने सभी साइटों /etc/mysql/my.cnf फ़ाइल & की बचत करने में नीचे

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 

लाइन जोड़ने के लिए इस

https://craftcms.stackexchange.com/questions/12084/getting-this-sql-error-group-by-incompatible-with-sql-mode-only-full-group-by/13662#13662

समुदाय द्वारा उत्तर देखें यह; और सर्वर पुनरारंभ करने के बाद

sudo service mysql restart 

काम

0

tadman की टिप्पणी के अलावा ट्यूटोरियल को मान रहे है के लिए, कर सकते हैं, तो आप समूह दोनों Bookmarks.id और BookmarksTags.tag_id करके अपने एसक्यूएल का चयन क्वेरी चाहिए बजाय का सिर्फ Bookmarks.id

कि ऐसा करने के लिए, BookmarksTable.php फ़ाइल में, लाइन

->distinct(['Bookmarks.id']) 

012 की तरह दिखना चाहिए
->distinct(['Bookmarks.id', 'BookmarksTags.tag_id']) 
संबंधित मुद्दे