SQL中基于WHERE AND LIKE逻辑运算符获取记录
Posted
技术标签:
【中文标题】SQL中基于WHERE AND LIKE逻辑运算符获取记录【英文标题】:Getting records based on WHERE AND LIKE Logical Operators in SQL 【发布时间】:2021-09-24 04:45:07 【问题描述】:我在这里有一张restaurant
的桌子,里面有餐厅记录。
表架构
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`cuisine` longtext COLLATE utf8_unicode_ci,
`street_no` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`street_name` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(75) COLLATE utf8_unicode_ci DEFAULT NULL,
`place_id` longtext COLLATE utf8_unicode_ci,
`address` longtext COLLATE utf8_unicode_ci,
`latitude` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`longitude` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`status` int(11) DEFAULT '0',
`created_at` int(11) DEFAULT NULL,
`updated_at` int(11) DEFAULT NULL,
在这里,我正在尝试根据这些列获取餐厅
city
、address
、status
这里如果 status=0
表示餐厅处于待处理状态
如果 status=1
表示餐厅处于已批准状态
我的方法:
/**
* GET RESTAURANT USING CITY OR ADDRESS
*
*/
public function get_restaurant_by_city($city, $address="", $page_per_row, $pagenum)
$this->db->where('status', 1)->like('cit', $city, 'both')->or_like('address', $address, 'both'); //both = %query%, before = %query, after = query%
if (isset($pagenum) && $pagenum !== 0)
$pagenum = ($pagenum - 1) * $page_per_row;
else
if(isset($_GET['page']))
$pagenum = ($pagenum + 1) * $page_per_row;
else
$pagenum = 0;
$find = $this->db->get($this->table, $page_per_row , $pagenum);
return $find->result();
问题: 申请$this->db->where('status', 1)
后,我仍然得到有status=0
的记录。如果有人指导我如何以完美的方式编写 SQL 查询以获得所需的结果,那就太好了。
使用演示数据:
city
露台
address
4332 Lakelse Ave, Terrace, BC V8G 1N8, Canada
【问题讨论】:
使用查询分组 你能解释一下你指向的地方吗? CI2 还是 CI3?哪个 CI 版本? 我猜是 CI v3.1 参考codeigniter.com/userguide3/database/… 【参考方案1】:归功于@Devsi Odedra
这是我的问题的解决方案。
$this->db->group_start()
->like('city', $city, 'both')
->or_like('address', $address, 'both')//both = %query%, before = %query, after = query%
->group_end()
->where('status', 1);
【讨论】:
以上是关于SQL中基于WHERE AND LIKE逻辑运算符获取记录的主要内容,如果未能解决你的问题,请参考以下文章