在PHP中使用AND查询但不忽略AND如果其值未选中/null

在PHP中使用AND查询但不忽略AND如果其值未选中/null,php,mysql,sql,Php,Mysql,Sql,我使用了两个不同的复选框下拉菜单,但两个菜单都使用相同的提交按钮(提交的形式相同) 提交时,选中的复选框将在表格中显示给用户。每个菜单中的选项在数据库中链接到一个单独的列(因此菜单1具有属于列a的值/选项,菜单2具有属于列B的值/选项) 在我的php代码中,我得到了一个foreach,它检查选中的复选框,并将这些复选框传递到一个变量中。此变量正在查询中使用。然而,问题是,当用户在两个菜单中选择一个选项时,查询应使用AND指定搜索(菜单1和菜单2的值必须在结果中-如果其中一个不是,则应不返回任何内

我使用了两个不同的复选框下拉菜单,但两个菜单都使用相同的提交按钮(提交的形式相同)

提交时,选中的复选框将在表格中显示给用户。每个菜单中的选项在数据库中链接到一个单独的列(因此菜单1具有属于列a的值/选项,菜单2具有属于列B的值/选项)

在我的php代码中,我得到了一个foreach,它检查选中的复选框,并将这些复选框传递到一个变量中。此变量正在查询中使用。然而,问题是,当用户在两个菜单中选择一个选项时,查询应使用AND指定搜索(菜单1和菜单2的值必须在结果中-如果其中一个不是,则应不返回任何内容),但也有可能在菜单1中仅选择一个复选框,如果这样做,则应忽略查询中的第二个和(对于数据库中的B/menu2列)。但问题是,这可能吗

HTML代码:

<form method="post">
<div id="list1" class="dropdown-check-list">
        <span class="anchor">Select type of Living Lab</span>
        <ul class="items">
              <li><input type="checkbox" name="columns[]" value="Physical_location" />Physical location</li>
              <li><input type="checkbox" name="columns[]" value="Virtual_network" />Virtual network</li>
              <li><input type="checkbox" name="columns[]" value="Project" />Project</li>      
        </ul>
    </div>  

<div id="list2" class="dropdown-check-list">
        <span class="anchor">Select stage of Living Lab</span>
        <ul class="items">
              <li><input type="checkbox" name="columns[]" value="Starting_phase" />Starting phase</li>
              <li><input type="checkbox" name="columns[]" value="Running_phase" />Running phase</li>
              <li><input type="checkbox" name="columns[]" value="Completed" />Completed</li>      
        </ul>
    </div>  

<input type="submit" name="go" value="Submit"/>
</form>
foreach($_POST['columns'] as $key_post=>$value_post){ 
// Runs mysql_real_escape_string() on every value encountered.
    $clean_criteria = array_map('mysql_real_escape_string', $_REQUEST['columns']);

    // Convert the array into a string.
    $criteria = implode($clean_criteria,"|");               
}
查询代码:

$tmp = $wpdb->get_results("
        SELECT
            type_of_living_lab, stage_of_living_lab         
        FROM           
            wp_participants_database            
        WHERE 
            type_of_living_lab REGEXP ('$criteria') AND stage_of_living_lab REGEXP ('$criteria')            
        ORDER BY 
            name_of_living_lab ASC
    "); 
在查询中,AND不起作用,因为如果在菜单1或菜单2中未选择任何内容,则AND的$criteria不在数据库中,因此不为true(这将不返回任何内容)。由于查询必须指定搜索,因此不能使用OR(如果在复选框中都选中了提交的值,则两个值都应位于数据库/结果中)


提前谢谢你

在您的foreach循环中,您不是在每个循环上重写$criteria变量吗?@Pierre EmmanuelLevesque,我认为
内爆
将进行串联。在您的情况下,您必须使用2个veriables。内爆将$clean_criteria数组连接到$criteria字符串中,但在下一个循环中,这种情况再次发生,因此在每个循环中重写$criteria。此外,这些不应该是单选按钮,即每组一个检查。好的,谢谢大家!将对3个查询执行多个if语句@Pierre Emmanuel Levesque也会删除foreach,如果它是不必要的,这也有点道理;)。非常感谢。