我需要进行搜索查询,用户可以按名称或课程或年份或成员进行搜索,上述任何一项,用户cam也可以搜索所有字段或任意数量的字段,例如; - 只有名字和&当然。
怎么可能?我不想进行不同的查询,是否可以使用单个查询?现在我的查询是:
$query="SELECT * FROM fsb_profile
WHERE profile_name = '".$_REQUEST['name']."'
AND profile_member= '".$_REQUEST['type']."'
AND profile_year= '".$_REQUEST['year']."'
AND profile_course='".$_REQUEST['course']."'
OR profile_name = '".$_REQUEST['name']."'
OR profile_member= '".$_REQUEST['type']."'
OR profile_year= '".$_REQUEST['year']."'
OR profile_course='".$_REQUEST['course']."'";
但它没有运行,只能搜索任何一个字段,它是如何可能的?
答案 0 :(得分:11)
如果你在where子句中混合AND和OR,那么使用括号来确切表明组合应该如何表达是有用的:(A AND B)或C与A AND(B OR C)不同)。 SQL将以自己的方式解释A AND B OR C(没有任何括号),但不一定是您可能期望(或打算)解释它。
e.g。
WHERE Likes Soccer AND ( Likes Pizza OR Likes Whiskey )
正在寻找一个喜欢足球的人,喜欢披萨或威士忌;所以它会挑选喜欢披萨的足球爱好者,喜欢威士忌的足球爱好者,喜欢披萨和威士忌的足球爱好者
WHERE ( Likes Soccer AND Likes Pizza ) OR Likes Whiskey
正在寻找喜欢足球和比萨的人,或喜欢威士忌的人;所以它会挑选足球爱好者,他们也必须喜欢披萨,或威士忌爱好者,或者足球爱好者,他们也必须喜欢披萨,但也可能喜欢威士忌
答案 1 :(得分:1)
只需使用or
,您的查询即可使用。
$query="SELECT * FROM fsb_profile
WHERE profile_name = '".$_REQUEST['name']."'
OR profile_member= '".$_REQUEST['type']."'
OR profile_year= '".$_REQUEST['year']."'
OR profile_course='".$_REQUEST['course']."'";
未经测试。