简体   繁体   English

使用Web服务的两个不同字段使用OR的MySQL查询代码

[英]MySQL query code using the OR for two different fields with Web Service

Normally I can figure this out, but the format looks a bit different then what I am used to. 通常我可以弄清楚这一点,但是格式看起来与我习惯的有所不同。 I have a web service using php with CodeIgnighter. 我有一个使用CodeIgnighter的php的Web服务。 The function looks like this: 该函数如下所示:

    function getCurrentSales($office_id)
    {
        $CI =& get_instance();
        $CI->load->model("properties");

        //Get the properties
        $where = array('field_SaleOfficeCode'=>$office_id);
        $where = array('field_ListOfficeCode'=>$office_id);
        $result = $CI->properties->getCurrentSales($where); 
        $properties = $result->result_array();

        foreach($properties as $p){
            //Get property images
            $where = array('ListingKey'=>$p['UniqueKey']);
            $property_arr[] = $p;
        }   

            return  $property_arr;
    }

    $this->nusoap_server->service(file_get_contents("php://input"));
} 

What I am trying to do is return rows where field_ListOfficeCode or field_ListOfficeCode have the value of $office_id . 我想做的是返回其中field_ListOfficeCodefield_ListOfficeCode具有$office_id值的行。 As it is now, only when field_ListOfficeCode=>$office_id , not when one or the other equals the value. 就像现在一样,仅当field_ListOfficeCode=>$office_id ,而当一个或另一个等于该值时,则不然。

Models Method Code: 型号方法代码:

function getCurrentSales($where = null) {


    $this->db->select('field_ListingKey as UniqueKey,
                        field_LocaleListingStatus as Status,
                        field_CloseDate as ClosingDate,
                        field_ContractDate as ContractDate,
                        field_ListingID as MLS,
                        TRIM("#VARIES" from field_FullStreetAddress) as StreetAddress,
                        field_ListPrice as Price,
                        field_ListOfficeCode as BrokerID,
                        if(field_Beds != "", field_Beds, 0) as NumBeds,
                        if(field_BathsFull != "", field_BathsFull, 0) as NumFullBaths,
                        if(field_BathsHalf != "", field_BathsHalf, 0) as NumHalfBaths,
                        field_InternetRemarks as PropertyRemarks,
                        field_ListOfficeName as ListingOfficeName,
                        field_ListPicture3URL as MainPhoto,
                        CONCAT(field_ListAgentNickname, " ", field_ListAgentLastName, " ", (if(field_ListAgentNameSuffix = "NULL", field_ListAgentNameSuffix, ""))) as ListingAgent,
                        CONCAT(field_SaleAgentNickname, " ", field_SaleAgentLastName, " ", (if(field_SaleAgentNameSuffix = "NULL", field_SaleAgentNameSuffix, ""))) as SalesAgent,
                        CONCAT(field_City, ", ", field_State, " ", field_PostalCode) as AreaAddress', false);


    $this->db->from('TABLE_2');



    if($where != null){
        $this->db->where($where, false);
        $this->db->where('YEAR(field_ContractDate) = YEAR(NOW())', NULL, false);
        $this->db->where('MONTH(field_ContractDate) = MONTH(NOW())', NULL, false);
    }


    $this->db->order_by('ContractDate', 'desc'); //get random row
    //$this->db->limit($limit);


    $query = $this->db->get();
    return $query;     
} 

I'm not familiar with CodeIgniter, but I would suspect your problem is with these two lines 我不熟悉CodeIgniter,但我怀疑您的问题出在这两行

$where = array('field_SaleOfficeCode'=>$office_id);
$where = array('field_ListOfficeCode'=>$office_id);

You aren't actually building up an array of where clauses, but rather overriding the first assignment with the second, which explains why you are only getting results that match field_ListOfficeCode == $office_id 您实际上并不是在构建where子句的数组,而是将第一个分配替换为第二个分配,这说明了为什么只获得与field_ListOfficeCode == $office_id相匹配的结果

Depending on how CodeIgniter expects these where clauses to be formed, I would assume it should be something like 根据CodeIgniter期望这些where子句形成的方式,我认为它应该类似于

$where = array(
    array('field_SaleOfficeCode'=>$office_id),
    array('field_ListOfficeCode'=>$office_id)
)

Or from a quick look at the documentation 或快速浏览文档

$where = array(
    'field_SaleOfficeCode'=>$office_id,
    'field_ListOfficeCode'=>$office_id
)

And then in your getCurrentSales function, it should be 然后在您的getCurrentSales函数中,它应该是

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM