2012-11-18 8 views
6

मैं एक प्रश्न यह नीचे की शर्तों (आदि शून्य से का चयन करें, से,) हैCodeigniter डीबी क्वेरी .. जहां, या, और साथ और तरह

$this->db->where('show_year', $yyyy); 
$this->db->or_where('idn', $idn); 
$this->db->or_like('post_slug', $idn); 

जो रूपों

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' 
OR `idn` = 'the' 
AND `post_slug` LIKE '%the%' 

हालांकि मैं इसे बनाने की देख रहा हूँ अधिक

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' 
AND (`idn` = 'the' OR `post_slug` LIKE '%the%') 

मेरे समस्या इम यकीन है कि अगर सीआई के सक्रिय रिकॉर्ड इस धारणा का समर्थन करता है नहीं है, और अगर यह होता है, कैसे होगा की तरह मैं इसे से निपटता हूं, क्योंकि मुझे दस्तावेज़ों में कहीं भी इसकी धारणा नहीं मिल रही है। इससे कोई फर्क नहीं पड़ता कि मैं like, or_like, where, or_where कैसे बदल सकता हूं, मैं कुछ समान भी नहीं कर सकता। तो किसी को भी कोई विचार मिला? यदि संभव हो तो मैं कच्चे प्रश्न से दूर रहना पसंद करूंगा, लेकिन अगर मुझे एक तैयार करना है और इसे इस तरह करना है, तो मैं बस इतना पसंद नहीं करूंगा।

+0

मुझे लगता है कि इस सवाल का जवाब मदद कर सकता है, http://stackoverflow.com/questions/11937867/nested-where-clauses-codeigniter-mysql- क्वेरी/11940789 # 11940789 बस '(...)' भाग को एक '$ this-> db-> के अंदर फेंक दें जहां() 'एक स्ट्रिंग के रूप में कॉल करें ('() 's) – complex857

+0

मुझे लगता है कि आप चालू हो सकते हैं उस के साथ कुछ करने के लिए। उम्मीद कर रहा था कि इसे हिस्सों में तोड़ने के साधनों को तोड़ने का एक साधन था क्योंकि इसे समय में बदलना आसान हो गया था, और लाइन को नीचे चलाया गया था जो पूरे प्रश्न को पूरी तरह से यादृच्छिक परिस्थितियों के माध्यम से बनाता है लेकिन अगर यह एकमात्र मामला है मैं इसे लेता हूं, अच्छा लगता है – chris

उत्तर

2

क्या आपने इसे आजमाया?

SELECT * FROM (`nyb_articles`) 
WHERE `show_year` = '2009' AND `idn` = 'the' 
OR `show_year`='2009' AND `post_slug` LIKE '%the%' 

मुझे लगता है कि निम्नलिखित ऊपर अभिव्यक्ति का उत्पादन:

$this->db->select(...)->from(...)-> 
where("show_year","2009")->where("idn","the")-> 
or_where("show_year","2009")->like("post_slug","%the%") 
+1

ब्रांड्स के बिना 'AND' और' OR' मिक्सिंग संभवतः एक पठनीयता/रखरखाव दृष्टिकोण से एक बुरा विचार है, भले ही वितरण क्षमता अब इरादे से काम करे। बेहतर इसे सुरक्षित करें और [डीएनएफ] (http://en.wikipedia.org/wiki/Disjunctive_normal_form) या [सीएनएफ] (http://en.wikipedia.org/wiki/Conjunctive_normal_form) खंडों का उपयोग करें। – complex857

+0

मुझे पता है लेकिन सीआई के एआर के साथ कोष्ठक नहीं कर सकते हैं। यह केवल एक (एन बदसूरत) कामकाज है। Mysql में ऑपरेटर वरीयता की जांच करें: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html - mysql 'OR' के बाद पहले' AND' को evalutes। – uzsolt

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