我想用户搜索每个字段单独或两个字段,或者根据他/她想要的所有三个字段(都在同一个表中)
示例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 ";
答案 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';