如果值为空,如何忽略SQL选择命令


How to ignore SQL Select command for a row if the value is empty

我有这个SQL查询:

$sql2 = "SELECT * FROM MyTable WHERE time1='".$_POST['time']."' AND type1='".$_POST['type']."';
结果:

$result1 = $conn->query($sql2);
if ($result1->num_rows > 0) {
    // output data of each row
    while($row = $result1->fetch_assoc()) {
        echo $row["name1"];
  • name1行为数据库中活动的名称。

HTML表单有以下两个选择列表:

<select id="time" name="time" required="" data-do-validate="true">
    <option value="">Select ...</option> // this is the NULL value
    <option value="time1">Type 1</option>
    <option value="time2">Type 2</option>
    <option value="time3">Type 3</option>
    <option value="time4">Type 4</option>
                        </select>
<select id="type" name="type" required="" data-do-validate="true">
    <option value="">Select ...</option> // this is the NULL value
    <option value="type1">Type 1</option>
    <option value="type1">Type 2</option>
    <option value="type1">Type 3</option>
    <option value="type1">Type 4</option>
                        </select>

所以我尝试做的是从数据库中选择所有活动的名称与HTML表单提交的匹配数据。

BUT我另外想要的是忽略SQL选择的时间(例如),如果用户留下的值为空(选择…),在这种情况下,结果将是仅基于类型的所有活动的名称。如果他选择了一个时间和一个类型,在这种情况下的结果将根据 time type 的活动更加指定。

我能做什么?

谢谢!

为什么要运行一个完整的动态构建查询?

SELECT * FROM MyTable WHERE (1=? AND time1=?) AND type1=?;

具有参数值:isset($_POST['time']) ? 1 : 0isset($_POST['time']) ? $_POST['time'] : null$_POST['type']

MySQL将处理不做(1=0 AND time1=?)部分的优化

您可以根据$_POST值构建语句(顺便说一下,在生产中您不应该直接在SQL语句中使用$_POST值)。

$connect = "";
$sql2 = "SELECT * FROM MyTable ";
if($_POST['time']!='' || $_POST['type']!='') {
  $sql2 .= "WHERE ";
  if($_POST['time']!='') {
      $sql2 .= "time1='".$_POST['time']."'";
      $connect = " AND ";
  }
  if($_POST['type']!='') {
     $sql2 .= $connect . "type1='".$_POST['type']."'";
  }
}
    if(isset($_POST["time"])){ // Not Empty
      $sql2 = "SELECT * FROM MyTable WHERE time1='".$_POST['time']."' AND type1='".$_POST['type']."';
    } 
    else{ //Only select the type
      $sql2 = "SELECT * FROM MyTable WHERE type1='".$_POST['type']."';
    }
    $result1 = $conn->query($sql2);
if ($result1->num_rows > 0) {
    // output data of each row
    while($row = $result1->fetch_assoc()) {
        echo $row["name1"];