Я тестировал свой запрос со случайными строками, чтобы увидеть, будут ли отображаться результаты.
Одна строка, которую я тестировал, является cal
, поэтому запрос должен быть простым, не так ли?
SELECT c.'ID' as id, CONCAT(p.'Name', ' > ', c.'Name') as name, 'cal' as q
FROM 'cq_provice' p JOIN 'cq_city' c ON c.'provinceID' = p.'ID'
WHERE (CONCAT(p.'Name', ' > ', c.'Name') LIKE '%cal%') ORDER BY p.'Name', c.'Name'
LIMIT 0, 50
Однако с моими 2 подготовленными sql-запросами: один с использованием метода codeigniter и один с использованием обычного:
# 1
$this->db->select('c.ID as id');
$this->db->select('CONCAT(p.Name, \' > \', c.Name) as name');
$this->db->select($term.' as q');
$this->db->from('cq_provice p');
$this->db->join('cq_city c', 'c.provinceID = p.ID');
$this->db->like('CONCAT(p.Name, \' > \', c.Name)', $this->db->escape($this->input->post('search')), 'both');
$this->db->order_by('p.Name', 'ASC');
$this->db->order_by('c.Name', 'ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();
# 2
$query = "SELECT c.'ID' as id, CONCAT(p.'Name', ' > ', c.'Name') as name, ".$term." as q
FROM 'cq_provice' p JOIN 'cq_city' c ON c.'provinceID' = p.'ID'
WHERE (CONCAT(p.'Name', ' > ', c.'Name') LIKE
'%".$this->db->escape($this->input->post('search'))."%')
ORDER BY p.'Name', c.'Name' LIMIT ".$offset.", ".$result_count;
И оба они дают мне одно и то же выражение запроса:
SELECT c.'ID' as id, CONCAT(p.'Name', ' > ', c.'Name') as name, 'cal' as q
FROM 'cq_provice' p JOIN 'cq_city' c ON c.'provinceID' = p.'ID'
WHERE (CONCAT(p.'Name', ' > ', c.'Name') LIKE '%'cal'%')
ORDER BY p.'Name', c.'Name' LIMIT 0, 50
Моя проблема заключается в выражении WHERE (CONCAT(p.
Name , ' > ', c.
Name ) LIKE '%'cal'%'
где оператор LIKE должен быть '%cal%'
поэтому я попытался использовать trim и regex но они дали мне тот же результат:
SELECT c.'ID' as id, CONCAT(p.'Name', ' > ', c.'Name') as name, 'cal' as q
FROM 'cq_provice' p JOIN 'cq_city' c ON c.'provinceID' = p.'ID'
WHERE (CONCAT(p.'Name', ' > ', c.'Name') LIKE 'Êl%')
ORDER BY p.'Name', c.'Name' LIMIT 0, 50
Как это исправить? Как я могу помешать моему запросу перевести мою строку в качестве специальных символов?
Любая помощь высоко ценится.
$this->db->select(array('c.ID as id','CONCAT(p.Name, " > ", c.Name) as name',$term.' as q'));
$this->db->from('cq_provice p');
$this->db->join('cq_city c', 'c.provinceID = p.ID');
$this->db->like('CONCAT(p.Name, " > ", c.Name)', $this->db->escape($this->input->post('search')));
$this->db->order_by('p.Name ASC, c.Name ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();
или с MATCH
, AGAINST
$field = $this->db->escape($this->input->post('search'));
$this->db->select(array('c.ID as id','CONCAT(p.Name, " > ", c.Name) as name',$term.' as q'));
$this->db->from('cq_provice p');
$this->db->join('cq_city c', 'c.provinceID = p.ID');
$this->db->where('MATCH (p.Name,c.Name) AGAINST ('.$field.')', NULL, FALSE);
$this->db->order_by('p.Name ASC, c.Name ASC');
$this->db->limit($result_count, $offset);
$query = $this->db->get();
$this->input->post('search')
??