2016-05-04 6 views
6

क्वेरी मैं चलाने के लिए कोशिश कर रहा हूँ के लिए कोड हैCodeIgniter MySQL क्वेरी में अतिरिक्त रिक्त स्थान हो रही

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get(); 

$items = $query->num_rows(); 

Mysql क्वेरी स्ट्रिंग

SELECT replace(name, ' = ', ' ') FROM `items` 

है क्या कोड क्या कर रहा है एक रिक्त स्थान जोड़ रहा है "=" के बाद और बाद में क्वेरी को संकलित करते समय "=" जो परिणाम नहीं देता है क्योंकि उनके नामों में "=" के साथ कोई आइटम नहीं है, केवल "="।

foo=bar, replace(name, '=', ' ') returns 1 result. 
foo = bar, replace(name, ' = ', ' ') returns 0 results. 

CodeIgniter के संस्करण है कि मैं का उपयोग कर रहा है: 3.0.6

+0

सुनिश्चित नहीं हैं कि तुम क्यों mysql में ऐसा करना चाहते हैं हैं? यह एक महान दृष्टिकोण नहीं है। डीबी को क्वेरी करने से पहले आप स्ट्रिंग पर स्ट्रिंग को प्रतिस्थापित करना चाहते हैं। एक साथ लेकिन साथ "=" समस्या होता है या "+" - – Philip

+0

कारण मैं यह कर रहा हूँ @Philip कि क्या मैं बदलने के लिए देख रहा हूँ हमेशा एक ही बात नहीं है, यह काम करता है के साथ एकदम सही है, "।" "" । – Joscplan

+0

मुझे एक उदाहरण दें ताकि मैं समाधान प्रदान कर सकूं। '=' की तरह ("की जगह> (की जगह (की जगह (नाम,, ''), ', - से> (' आइटम ') - – Philip

उत्तर

6

मैं CodeIgniter की मेरी नकल पर इस परीक्षण किया है और जब इस प्रकार फ़ॉर्मेट यह सिर्फ ठीक काम करता है:

$items = $this->db->like("replace(name, '=', ' ')", "foo bar", 'both')->get('items')->num_rows(); 

कुछ नोट:

  1. आपको() से आवश्यकता नहीं है, आप बस तालिका() विधि में पर्ची कर सकते हैं।
  2. आप अपनी विधियों को श्रृंखलाबद्ध कर सकते हैं ताकि आपको केवल एक चर निर्दिष्ट करने की आवश्यकता हो।
  3. चयन() विधि को छोड़कर तात्पर्य ('*') का चयन करता है।
2

आपका वाक्य रचना

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get(); 
दिखाया वास्तव में here इस क्वेरी

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo bar%'; 

उत्पादन किया जाता है तो वहाँ दुर्घटना से है foo के बीच एक और अधिक स्थान और बार यह विफल रहता है के रूप में

इस विकल्प क्वेरी

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo% bar%'; 

CodeIgniter

$query = $this->db->select('*')->from('items')->like("replace(name, '=', ' ')", "foo% bar", 'both')->get(); 

या इस क्वेरी का प्रयास भी बेहतर

SELECT * FROM `items` WHERE CONCAT(TRIM(SUBSTRING_INDEX(name, '=', 1)),' ',TRIM(SUBSTRING_INDEX(name, '=', -1))) LIKE '%foo bar%'; 

इस

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo%bar%'; 
012 का प्रयोग न करें

उन प्रश्नों के परिणाम दिखाए जाते हैं here

या तो आप एक प्रश्न अग्रणी हटाता है कि/अंतरिक्ष अनुगामी हो सकता था (Example)

2

मैं CodeIgniter या php के साथ जुड़े में एक विधि कॉल replace() लगता है नहीं कर सकते।

str_replace(find,replace,string)

उदाहरण

$one = 'as = bb = cc=dd '; 
$var = str_replace('=', ' ', $one); 
echo $var; 

phpfiddle Preview

प्रयास करें और आपकी क्वेरी के अंदर अपना कोड refactor नहीं है। इसे साफ करें और इसे क्वेरी में पास करें। त्रुटियों को ट्रैक करना भी आसान है।

+1

'प्रतिस्थापन' विधि MySQL में उपलब्ध है –

0

मैं

$this->db->query()

बजाय

$this->db->select(); 
$this->db->order_by(); 
$this->db->get(); 

इस्तेमाल किया और यह मेरे लिए काम किया।

मेरे प्रश्न था:

$records = $this->db->select(
"id,(select count(*) from 
(select 
     unnest(string_to_array(mycol,',')) v 
     from mytable) t where v::int > 0) as total", 
FALSE)->order_by("col1")->get("mytable1")->result_array(); 

जारी किया गया था, यह string_to_array(mycol,', ') जो त्रुटि दे रहा था पर एक अतिरिक्त स्थान जोड़ने था।

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