2009-08-07 9 views
9

हाय सोच रहा है कि शायद कोई नीचे दी गई त्रुटि पर कुछ प्रकाश डाल सकता है। एसक्यूएल स्थानीय रूप से ठीक काम करता है लेकिन मुझे नीचे दी गई त्रुटि दूरस्थ रूप से मिलती है।MySQL # 1140 - ग्रुप कॉलम का मिश्रण

SQL क्वेरी:

SELECT COUNT(node.nid), 
      node.nid AS nid, 
      node_data_field_update_date.field_update_date_value AS node_data_field_update_date_field_update_date_value 
    FROM node node 
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid 
    WHERE node.type IN ('update') 
ORDER BY node_data_field_update_date_field_update_date_value DESC 

MySQL ने कहा:

# 1140 - कोई साथ ग्रुप कॉलम (न्यूनतम(), मैक्स(), COUNT(), ...) के मिश्रण अगर वहाँ clause` कर रहा है कोई ग्रुप ग्रुप कॉलम गैर कानूनी है

+0

जब आप ग्रुप BY नहीं कर रहे हैं तो आप "COUNT (node.nid)" वापस आने की अपेक्षा करते हैं? –

उत्तर

9

aggregate function का उपयोग कर एकल कॉलम का कारण काम करता है जबकि कॉलम वाले संस्करण कुल कार्यों का उपयोग नहीं कर रहे हैं, इसलिए ऐसा नहीं है क्योंकि आपको GROUP BY खंड निर्दिष्ट करने की आवश्यकता है। यहां बताया गया है आपकी क्वेरी के समान दिखना चाहिए:

SELECT COUNT(n.nid), 
      n.nid, 
      ctu.field_update_date_value 
    FROM NODE n 
LEFT JOIN CONTENT_TYPE_UPDATE ctu ON ctu.vid = n.vid 
    WHERE n.type IN ('update') 
GROUP BY n.nid, ctu.field_update_date_value 
ORDER BY field_update_date_value DESC 

मैं छोटे लोगों के लिए अपनी मेज उपनाम बाहर बदल गया है - पढ़ने में आसान। यहाँ अपने मुद्दे का मांस है:

SELECT n.nid, 
      COUNT(n.fake_example_column),     
      ctu.field_update_date_value 
     ... 
GROUP BY n.nid, ctu.field_update_date_value 

मैं उदाहरण बदल क्रम में एक नकली स्तंभ का उपयोग करने के लिए कैसे ग्रुप द्वारा परिभाषित करने की आवश्यकता पर प्रकाश डाला। को में GROUP BY में उल्लिखित किसी भी कॉलम को बिना किसी फ़ंक्शन में लपेटने के संदर्भ में संदर्भित किया जाना चाहिए। मैं कहता हूं कि होना चाहिए क्योंकि MySQL is the only db I'm aware of that supports a GROUP BY where you can selectively omit columns - प्रश्नों के बारे में कई सवाल हैं कि MySQL पर क्वेरी क्यों काम करती हैं लेकिन अन्य डीबीएस में बदलाव किए बिना पोर्ट नहीं किया जा सकता है। जाहिर है आपके मामले में, आपको अभी भी कम से कम एक को परिभाषित करने की आवश्यकता है।

+0

क्या आप एक और उदाहरण के साथ समझा सकते हैं –

0

इसे वापस छीन मूल बातें करने के लिए:

SELECT COUNT(node.nid) 
    FROM node node 
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid 
    WHERE node.type IN ('update') 
ORDER BY node_data_field_update_date.field_update_date_value DESC 
12

आपके सर्वर में शायद ONLY_FULL_GROUP_BY चालू है। आप या तो इसे बंद कर सकते हैं या अपने प्रत्येक चयनित फ़ील्ड को समूह में जोड़ सकते हैं।

0

मुझे MySQL 5.0 के पुराने संस्करण में एक ही समस्या है। नए 5.5 संस्करण में यह काम करता है!

SELECT COUNT(*), id 
FROM `cities` AS `c` 
0

Laravel फ्रेमवर्क में, config फ़ोल्डर में डेटाबेस फ़ाइल में 'strict' => false की स्थापना, यह ठीक कर देंगे।

संबंधित मुद्दे