2011-04-21 15 views
7

मैं अपने सीएमएस के लिए नेस्टेड सेट के साथ काम कर रहा हूं लेकिन MySQL 5.5 के बाद से मैं नोड नहीं ले सकता।
निम्न त्रुटि फेंक दिया जाता है:बिगिनट आउट-ऑफ-रेंज त्रुटि MySQL 5.5

त्रुटि डॉक्स को पुन: क्रम जबकि: त्रुटि MySQL-डीबी में: अमान्य एसक्यूएल:

SELECT baum2.id AS id, 
COUNT(*) AS level 
FROM elisabeth_tree AS baum1, 
elisabeth_tree AS baum2 
WHERE baum2.lft BETWEEN baum1.lft AND baum1.rgt 
GROUP BY baum2.lft 
ORDER BY ABS(baum2.id - 6); 

त्रुटि: BIGINT अहस्ताक्षरित मूल्य में सीमा से बाहर है '(lektorenbaum2id।। - 6) '
त्रुटि संख्या: 16 9 0

क्या किसी ने इस समस्या को हल किया है? मैंने पहले से ही कुछ हिस्सों को डालने की कोशिश की लेकिन यह सफल नहीं था।

+0

@ user718790, stackoverflow में आपका स्वागत है। – Johan

उत्तर

10

बिगिनट अनसिनत हस्ताक्षरित है और नकारात्मक नहीं हो सकता है।

आपका अभिव्यक्ति ABS(lektoren.baum2.id - 6) एक नकारात्मक मध्यवर्ती मूल्य का उपयोग करेगा अगर आईडी कम से कम 6

मुमकिन है पहले के संस्करणों परोक्ष हस्ताक्षर करने के लिए परिवर्तित है। आपको एक कास्ट करने की जरूरत है।

ORDER BY ABS(CAST(lectoren.baum2.id AS SIGNED) - 6) 
+0

हाँ, यह है, धन्यवाद! :) – user718790

+2

[यहां दस्तावेज़ों] के अनुसार (http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_unsigned_subtraction): _By डिफ़ॉल्ट, पूर्णांक ऑपरेटरों के बीच घटाव एक संयुक्त राष्ट्र का उत्पादन करता है नतीजा अगर कोई ऑपरेंड UNSIGNED है ._ – Wiseguy

+0

मुझे MySQL 5.5 में अपग्रेड करने के बाद भी एक ही समस्या का सामना करना पड़ा है http://dev.mysql.com/doc/refman/5.5/en/out-of-range-and- overflow.html – Omesh

1

ORDER BY ABS(CAST(lectoren.baum2.id AS BIGINT SIGNED) - 6)

कि परिवर्तन का प्रयास करें mysql केवल होगा।

बजाय,

ORDER BY ABS(- 6 + baum2.id); 
5
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; 

कॉल इस से पहले क्वेरी निष्पादित किया जाता है है।

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