如何进行mysql查询,用户可以从多个选项中进行选择。 Fox示例我有一个用户可以用来搜索房屋的表格。现在我有一个选择框,您可以选择是否需要房屋,公寓或其他任何东西。然后我有第二个盒子,你可以选择你想要的房子或公寓所在的城市。也许还有另一个最高价格的房子。
现在你将如何进行mysql查询?我的问题是,我会这样做: if($ _ POST [“house_type”]!= 0){ $ select = mysql_query(“SELECT * FROM WHERE type ='”。$ _ POST [“house_type”]。“'”); } 但现在我只有一个人选择了房屋类型但没有其他选择的情况。那么我是否必须为所选元素的每种可能组合做一个“if”?
强调我的问题:
if(!isset($_POST["house_type"])) {
if($_POST["something"] == 0) {
$search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);
}
elseif($_POST["something"] != 0) {
$search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever');
}
}
elseif(!isset($_POST["house_type"])) {
if($_POST["something"] == 0) {
$search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);
}
elseif($_POST["something"] != 0) {
$search_select = @mysql_query("SELECT * FROM housedata something = $_POST["whatever"] AND somethingelse = 'whatever');
}
}
现在想象我有10或20个不同的选择框,输入字段和复选框,我将不得不做一个mysql查询取决于这些框和fiels和复选框填充。这将是一个非常复杂,缓慢和可怕的代码。那么是否有可能进行如下的mysql查询:
SELECT * FROM whatever WHERE house_data = '".$whatever."' AND (if(isset($_POST["something"])) { whatever = '".$whatever2."' } AND ...;
你理解我的意思?解释起来有点复杂,但实际上它是一个非常重要的问题,可能很容易回答。
感谢您的帮助! phpheini
答案 0 :(得分:4)
在运行SQL之前生成WHERE子句。
一个简短的例子:
$whereClause = "";
if ($_POST['opt1']) {
$opt1 = mysql_real_escape_string($_POST['opt1']);
$whereClause .= "AND opt1='$opt1'";
}
if ($_POST['opt2']) {
$opt2 = mysql_real_escape_string($_POST['opt2']);
$whereClause .= "AND opt2='$opt2'";
}
mysql_query("SELECT * FROM table WHERE 1 ".$whereClause);
答案 1 :(得分:1)
要指出你正确的方向,尝试这样的事情:
if(isset($_POST["something"]))
{
$where = " AND whatever = '".$whatever2."'";
}
else $where = '';
mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where);
答案 2 :(得分:1)
$where = array();
if($_POST["something"]) {
$where[] = " something =".$_POST["something"];
}
if($_POST["something2"]) {
$where[] = " something2=".$_POST["something2"];
}
.
.
.
//build where string
$where_ = !(empty($where) ? " WHERE ".implode(" AND ",$where) : "";
//build sql
$sql = "SELECT * ... ".$where;
答案 3 :(得分:0)
编写一些简单的查询构建器
$where = array();
if($_POST["something"]) {
$where[] = sprintf(" something='%s'",$_POST["something"]);
// sprintf - 防止SQL注入 }
if($_POST["something2"]) {
$where[] = sprintf(" something2='%s'",$_POST["something2"]);
}
//build where string
$where_str = " WHERE ".implode(" AND ",$where);
//build sql
$sql = "SELECT * ... $where_str";
答案 4 :(得分:0)
您需要单独构建搜索字符串,但格式只是
SELECT * FROM your_table WHERE number = {$number} AND sentence = '{$sentence}';
由于您是基于PHP逻辑创建搜索词,请执行以下操作:
$search = "SELECT * FROM your_table WHERE ";
if(isset($whatever)) $search .= "something = '{$whatever}'";
if(isset($whateverelse)) $search .= " AND somethingelse = '{$whateverelse}'";
$search_select = mysql_query($search);