MySQL选择AND OR

时间:2012-11-06 17:27:28

标签: php mysql forms select

我的查询语句没有成功,我认为这与我执行它的方式有关。

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or phone = '".$phone."'";

基本上,当名字和姓氏与发布的名字和姓氏相匹配时,我想从customer_det中选择所有名称。如果没有发布的姓名,那么我希望它选择所有已发布的电话号码匹配的位置。我的三个变量$ fname,$ lname和$ phone都设置为从上一个表格中读取$ _POST ['fname'];等...

这是正确使用的逻辑吗?

2 个答案:

答案 0 :(得分:1)

未使用正确的逻辑,因为它合并为1个查询。如果仅使用了1个查询,那么当它们都没有发布时,它会搜索$fname=''$lname=''以及$ phone部分。

尝试:

if( !empty($fname) && !empty($lname) )
  $query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."')";
 else
    $query5 = "select * from ".$db_prefix."customer_det where phone = '".$phone."'";

答案 1 :(得分:0)

您的查询现在正在执行的操作将返回名称匹配的所有行以及电话号码匹配的所有行。如果您只想返回电话号码匹配的行,但只有当提交的名字和姓氏为空时,您需要将其添加到where子句中,如下所示:

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or ('".$fname."' = '' and '".$lname."' = '' and phone = '".$phone."'");

这确保了当提交的名字和姓氏都是空白时,电话号码将仅用于匹配行,并且不需要编码两个单独的查询。