![](/img/trans.png)
[英]how to use regular expression in MySQL where like and in statement in where clause
[英]How to use SOUNDS LIKE in where clause
Codeigniter活动记录查询给我错误。 如何将SOUNDS LIKE放入where子句。
function _search($type, $q, $qes, $sort = null, $start = 0) {
$type = strtolower($type);
$q = strtolower($q);
$this->db->select("*");
$this->db->from("books");
$this->db->where("SOUNDEX(name) IN({$q})");
foreach($qes as $k){
$this->db->or_where("name SOUNDS LIKE '$k'");
}
foreach($qes as $k){
$this->db->or_where("name LIKE '%$k%'");
}
$this->db->where("status", 1);
if ($type != NULL) {
$this->db->where("LOWER(type)", $type);
}
//$this->db->like("LOWER(name)", $q);
$this->db->limit(BWK_MAX_BOOK_SIZE, $start);
switch ($sort) {
case 1:
break;
case 2:
$this->db->order_by("sellingPrice", "ASC");
break;
case 3:
$this->db->order_by("sellingPrice", "DESC");
break;
case 4:
$this->db->order_by("created", "DESC");
break;
}
当我回显查询时,这给了我查询。 我正在寻找技术,我需要获得技术技术等。
SELECT * FROM `books` WHERE SOUNDEX(name) IN('t254') OR `name` `SOUNDS` LIKE 'technolog' OR `name` LIKE '%technologi%' AND `status` = 1 AND LOWER(type) = 'school' LIMIT 50
出错
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '`SOUNDS` LIKE 'technolog' OR `name` LIKE '%technolog%' AND `status` = 1 AND LOWE' at line 4
每件事都很好,但是当我把声音像是它给我错误。
从:DB_query_builder.php ,可以看到的是第三个参数决定是否转义。
public function or_where($key, $value = NULL, $escape = NULL){
}
因此,请告诉我们不要逃避它
$this->db->or_where("name SOUNDS LIKE '$k'", NULL, FALSE);
您可以将HAVING子句与ORDER BY和LIKE一起使用吗?
HAVING子句: https : //www.w3schools.com/sql/sql_having.asp
这可能是最好的东西在这里分组
您可以尝试以下
$this->db
->select('*')
->from('books')
->where_in('SOUNDEX(name)', $q, NULL);
if (is_array($qes) && count($qes) > 0)
{
$this->db->group_start();
foreach($qes AS $k)
{
$this->db->or_group_start();
$this->db
->where('name SOUNDS LIKE '.$this->db->escape($k), NULL, false)
->or_like('name', $k);
$this->db->group_end();
}
$this->db->group_end();
}
if (!is_null($type))
{
$this->db->where('LOWER(type)', $type);
}
switch ($sort) {
case 1:
break;
case 2:
$this->db->order_by("sellingPrice", "ASC");
break;
case 3:
$this->db->order_by("sellingPrice", "DESC");
break;
case 4:
$this->db->order_by("created", "DESC");
break;
}
echo $this->db
->where('status',1)
->limit(BWK_MAX_BOOK_SIZE, $start)
->get_compiled_select();
这将产生类似
SELECT *
FROM `books`
WHERE SOUNDEX(name) IN('t254') AND
(
(
name SOUNDS LIKE 'technologi' OR
`name` LIKE '%technologi%' ESCAPE '!'
)
OR
(
name SOUNDS LIKE 'whatever' OR
`name` LIKE '%whatever%' ESCAPE '!'
)
)
AND `status` = 1
AND LOWER(type) = 'school'
LIMIT 50
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.