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,

在这里,我正在尝试根据这些列获取餐厅 cityaddressstatus

这里如果 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逻辑运算符获取记录的主要内容,如果未能解决你的问题,请参考以下文章

sql select where like 变量模糊查询

SQL学习——LIKE运算符

sql 逻辑运算符(LIKE,IN NOT,AND,BETWEEN,OR)

SQL WHERE 子句

SQL Where 子句详解

SQL WHERE 子句