SQL one select通过PHP变量使用不同的where子句

SQL one select通过PHP变量使用不同的where子句,php,sql,Php,Sql,与此不同,我询问的是一个PHP变量 我试图在我的PHP文件上创建一个SQL SELECT语句,它可以选择所有人或单个人 if ( $watch_person == "all") { $sql = "SELECT WORK_RECORD FROM worklist "; } else { $sql = "SELECT WORK_RECORD FROM worklist WHERE PERSON_NO =

与此不同,我询问的是一个PHP变量

我试图在我的PHP文件上创建一个SQL SELECT语句,它可以选择所有人或单个人

if ( $watch_person == "all") {
  $sql = "SELECT WORK_RECORD
            FROM worklist
         ";
} else {
  $sql = "SELECT WORK_RECORD
            FROM worklist
           WHERE PERSON_NO = '".$watch_person."'
         ";
}

有没有一种方法可以在一条SQL语句中实现这一点?

您可以如下优化编码

$sql = "SELECT WORK_RECORD
             FROM worklist WHERE ";
if ( $watch_person == "all") {
   $sql .= " 1=1";
 } else {
   $sql .= "  PERSON_NO = '".$watch_person."' ";
 }

$sql = "SELECT WORK_RECORD
             FROM worklist WHERE ". ($watch_person == "all" ? "1=1" : "PERSON_NO = '".$watch_person."'");

您可以在if-else中使用where语句

$sql = "SELECT WORK_RECORD
        FROM worklist ". 
        ($watch_person == "all" ? "" : "WHERE PERSON_NO = '".$watch_person."'");

在条件允许的情况下,将更容易扩展


我会这样做:

$sql = "SELECT WORK_RECORD FROM worklist";
if($watch_person != "all"){
    $sql .= " WHERE PERSON_NO = '$watch_person'";
}

您实际上是在尝试两次输出同一组数据。您可以在一个查询中获取所有数据,然后根据所需的两组不同结果在PHP中对其进行过滤,从而避免需要第二个查询
$sql = "SELECT WORK_RECORD FROM worklist";
if($watch_person != "all"){
    $sql .= " WHERE PERSON_NO = '$watch_person'";
}