【问题标题】:Dynamic OR/AND in query查询中的动态 OR/AND
【发布时间】:2011-08-15 14:57:36
【问题描述】:

根据用户的选择,我需要过滤查询中的结果,但我不知道如何在 AND 之后正确实现动态 OR 语句。我目前在 CodeIgniter 中使用 Active Record,但这可能需要更改。

我基本上需要创建以下 sn-p:“WHERE city.id = 9 AND (eventType = 8 or eventType = 9)”

  1. 如果没有 OR 语句,那么我不需要 AND
  2. 可能有 1-n 个 OR 语句

我目前的代码如下:

$this->db->where('city.id =', $cityID);

    if ($eventTypes != NULL){
               foreach ($eventTypes as $item){
                    $eventTypeID = intval($item); 
                    $this->db->or_where('eventtype.id =', $eventTypeID);
               }
           }

这会产生:WHERE city.id = 13 OR eventtype.id = 6 OR eventtype.id = 8 ...所以我需要 AND (

【问题讨论】:

    标签: php sql codeigniter


    【解决方案1】:

    Codeigniter 的 "ActiveRecord" (airquotes...) 类相当有限,不适用于更高级的 AND/OR 范围,并指向原始 sql “更高级”的查询。

    我会制定您自己的 WHERE 字符串来构建您想要的特定查询,然后只需使用

    $this->db->where($sql)
    

    示例...

    $where = "city.id = $cityID ";
    
    if ($eventTypes != NULL)
    {
        $where .= "AND ( ";
        foreach ($eventTypes as $i => $type)
        {
            $eventTypeID = intval($type);
    
            // if it's not the first element
            // (assumes $eventTypes is non-associative)
            if ($i !== 0)
            {
                $where .= "OR ";
            }
            $where .= "eventtype.id = $eventTypeID ";
        }
        $where .= " ) ";
    }
    
    $this->db->where($where);
    

    【讨论】:

    • 会的。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多