2013-05-26 10 views
5

कम से कम ऐसा लगता है कि ऐसा हो रहा है। मैं एक वेबसाइट के लिए एक खोज बार बनाने की कोशिश कर रहा हूं और यह काम करता है, सिवाय इसके कि यह एक ऐसा खंड नहीं पढ़ रहा है जो केवल अनुमोदित सामग्री को वापस खींच लेगा। आप देख सकते हैं कि यह एक मुद्दा क्यों होगा।कोडिग्निटर जैसे क्लॉज ओवरराइडिंग जहां क्लॉज

वैसे भी, यह है कि क्या मैं अपने मॉडल

$match = $this->input->post('search');  
$this->db->where('approved', 'y'); 
$this->db->like('description', $match); 
$this->db->or_like('title', $match); 
$this->db->or_like('body', $match); 
$this->db->or_like('author', $match); 

$query = $this->db->get('story_tbl'); 

return $query->result(); 

में है और जब मैं क्वेरी प्रिंट आउट, यह है कि यह जहां खंड देखकर है लगता है, लेकिन यह बातें हैं कि खींच रही है जब मैं सामान वापस मिल है अनुमोदित या समीक्षा अधीन नहीं है।

यहाँ मेरी मुद्रित क्वेरी

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND `description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%' 

उत्तर

2

आपकी क्वेरी होना चाहिए

SELECT * FROM (`story_tbl`) WHERE `approved` = 'y' AND (`description` LIKE 
'%another%' OR `title` LIKE '%another%' OR `body` LIKE '%another%' OR 
`author` LIKE '%another%') 

चेक उन कोष्ठक है। तो, आपका सबसे अच्छा विकल्प सादा $this->db->query() का उपयोग करना है। आप सक्रिय रिकॉर्ड का उपयोग करने पर जोर देते हैं, तो आप उन कोष्ठक के लिए इस तरह यह क्या करना है -

$match = $this->input->post('search'); 
$this->db->where('approved', 'y'); 
$this->db->where("(`description` LIKE '%$match%'"); 
$this->db->or_where("`title` LIKE '%$match%'"); 
$this->db->or_where("`body` LIKE '%$match%'"); 
$this->db->or_where("`author` LIKE '%$match%')"); 
$query = $this->db->get('story_tbl'); 

संपादित करें:

true AND true OR true OR true //true 
false AND true OR true OR true //true just like your where clause is ignored 
false AND false OR false OR true //Still true 
false AND true OR false OR false //false 
false AND false OR false OR false //false 

तो इस क्वेरी सभी पंक्तियों जहां अनुमोदित = 'y वापस आ जाएगी 'या जहां शीर्षक, मुख्य लेखक से मेल खाता है' एक और '

मेरी पोस्ट क्वेरी में

true AND (true OR true OR true) //true 
false AND (true OR true OR true) //false, where clause is checked 
true AND (false OR false OR false) //false 
true AND (true OR false OR false) //true 

जो पंक्तियों को वापस कर देगा जहां अनुमोदित = 'वाई' और शीर्षक या शरीर या लेखक या विवरण 'दूसरे' से मेल खाते हैं। मेरा मानना ​​है कि यह वही है जो आप हासिल करना चाहते हैं।

+0

मैं उन ब्रैकेट क्यों चाहूंगा? यह है कि कैसे कोडनिर्देशक इसे पृष्ठ पर प्रिंट करता है, और मैंने जो पोस्ट किया है उसके ऊपर की क्वेरी अभी भी मेरे पहले खंड को अनदेखा कर रही है। मैं उलझन में हूं कि यह सक्रिय रिकॉर्ड पर $-> डीबी-> क्वेरी का उपयोग करना बेहतर क्यों होगा? – zazvorniki

+0

ब्रैकेट की अनुपस्थिति के कारण जहां खंड को अनदेखा किया जाता है। आपको समझने की जरूरत है कि कैसे और, या काम करता है। – sakibmoon

+0

मुझे समझ में आता है कि वे कैसे काम करते हैं, लेकिन जब मैंने ऊपर दिए गए कोड को चिपकाया तो मुझे 500 त्रुटि मिलती है। जब मैं अपने एसक्यूएल संपादक में उपर्युक्त क्वेरी में प्रवेश करता हूं तब भी प्रतीकों को – zazvorniki

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