php - 如何在php中动态添加多个WHERE子句

标签 php mysql

<分区>

我有五个输入字段,即技能、位置、公司、经验和薪水。根据用户要求,我将从数据库中获取值。我的问题是,如何动态使用 where 条件?考虑用户在技能和公司输入字段中输入值,我想从数据库中获取这些值该怎么做?现在我保留了 20 个 if 条件来解决这个问题

public function get_jobonline($skillname,$userid,$location)
{
    $company=$this->input->post('searchcompany');
    $experience=$this->input->post('experience');
    $salary=$this->input->post('salary');
    echo $company;
    if($location==NULL)
    {
        $query=$this->db->query("SELECT j.id AS job_id, j.created_date,j.title, l.city AS location, cm.name AS company_name,
        cm.logo FROM  `jobs` AS j
        LEFT JOIN  `keyword` AS k ON  `k`.`job_id` =  `j`.`id` 
        LEFT JOIN  `keyword_master` AS km ON  `km`.`id` =  `k`.`keyword_id` 
        LEFT JOIN  `location_master` AS l ON  `l`.`id` =  `j`.`location` 
        LEFT JOIN  `company_master` AS cm ON  `cm`.`id` =  `j`.`company_id` 
        WHERE km.name = '$skillname' AND j.uid='$userid'
        ;");
    }
    else
    {
        $query=$this->db->query("SELECT j.id AS job_id, j.created_date,j.title, l.city AS location, cm.name AS company_name,
        cm.logo FROM  `jobs` AS j
        LEFT JOIN  `keyword` AS k ON  `k`.`job_id` =  `j`.`id` 
        LEFT JOIN  `keyword_master` AS km ON  `km`.`id` =  `k`.`keyword_id` 
        LEFT JOIN  `location_master` AS l ON  `l`.`id` =  `j`.`location` 
        LEFT JOIN  `company_master` AS cm ON  `cm`.`id` =  `j`.`company_id` 
        WHERE km.name = '$skillname' AND j.uid='$userid' AND l.city='$location'
        ;");
    }

    // if($company != NULL && )

    return $query->result_array();
}

最佳答案

如果我没有理解错的话,您希望根据用户输入动态更改您的查询。 为此,您应该将查询本身和查询的函数分开。

伪代码中的示例:

// Let's suppose it's your base query 
// (that meets the minimum field required to do the research).
$sql = "SELECT j.id AS job_id, j.created_date,j.title,... WHERE 
         km.name = '$skillname'";

// U add the condition skill if the user typed it
if(isset($_POST['skill'])
    $sql .= "AND j.skill = '$_POST['skill']'";

... (for every input filled u add condition to the query)

// WHEN all input u needed to add are tested
// Query the DB
$query = $this->db->query($sql);

你甚至可以做得更好,方法是制作一个包含所有输入名称字段的数组,以便在其上循环。

关于php - 如何在php中动态添加多个WHERE子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30412857/

相关文章:

php - WordPress 查询仅显示内容不为空的帖子

javascript - php 中仅验证文件附件 doc 和 pdf

php - Laravel 调用未定义方法 App\Seo::mapInto()

php - 如何将两个MySQL连接合并为一个MySQL连接?

php - 删除行wordpress自定义数据库表

php - 是否可以使用 Fpdf 生成 Pdf 设计

php - Laravel 5.1 上传文件安全

php - 如何在php mysql中访问复选框的值

mysql - 如何在 Vim 中快速将 CSV 文件重新格式化为 SQL 格式?

php - file_put_contents 不创建 txt 文件