mysql如何在数据库中搜索三个字段

时间:2016-06-20 22:45:17

标签: php mysql

我想用户搜索每个字段单独或两个字段,或者根据他/她想要的所有三个字段(都在同一个表中)

示例1:用户可以选择性别MALE状态“PAID”

示例2:用户可以选择状态paid续订_状态NOT RENEWAL

示例3:用户可以选择性别female Renewal_status NOT RENEWAL等。

这是我的代码:

$sql = "SELECT * FROM member 
    WHERE Gender='$advocate_gender' 
    OR Status='$advocate_pcstatus' 
    OR Renewal_status='$renewal_status' 
    ORDER BY RollNo ";

2 个答案:

答案 0 :(得分:1)

您可以使用某种技术在一个查询中使用这些参数。像这样:

$sql = "SELECT * 
          FROM member 
         WHERE Gender = coalesce('$advocate_gender',Gender)
           AND Status = coalesce('$advocate_pcstatus', Status) 
           AND Renewal_status = coalesce('$renewal_status', Renewal_status) 
         ORDER BY RollNo ";

但要注意''(空)不等于NULL函数coalesce将检查的内容,如果传递的参数为null,它将替换下一个参数,如果您将$advocate_gender作为null传递,则where过滤器会产生Gender = Gender,这总是正确的。

此外,我将OR更改为AND它会更有意义,但如果您想检查一个或其他字段,只需更改它。

由于我告诉你,''(空)不等于NULL,你应该考虑使用预准备语句,这样语言就会照顾你的参数,最后查询将是:

$sql = "SELECT * 
          FROM member 
         WHERE Gender = coalesce( ?, Gender)
           AND Status = coalesce( ?, Status) 
           AND Renewal_status = coalesce( ?, Renewal_status) 
         ORDER BY RollNo ";

根据您使用的库,只需传递参数,然后将PDO reference视为

之一

答案 1 :(得分:1)

您需要动态构建sql:

$sql = 'SELECT * FROM member WHERE 1=1';

if ($advocate_gender) $sql .= " AND Gender='$advocate_gender'";
if ($advocate_pcstatus) $sql .= " AND Status='$advocate_pcstatus'";
if ($renewal_status) $sql .= " AND Renewal_status='$renewal_status'"; 
$sql .= ' ORDER BY RollNo';