我有一个搜索表单,在“results.php”中显示来自MySQL的匹配行。我有一些选择框让用户选择他的偏好。但是,用户可能不会从所有选择框中选择,而是从少数选择框中选择。如果发生这种情况,我的查询将不返回任何内容,因为它应该使用所有可用的选项。
例如,唯一必须选择的变量是make
。 disabled
是标准的,我在每个查询中都需要它。
如何修改以下内容,以便在未选择AND model = '$model'
时移除model
,而在未选择AND year = '$year'
时移除year
?
我将使用该示例进行更多选择。
$make = $_POST["make"];
$model = $_POST["model"];
$year = $_POST["year"];
$useds = mysql_query("SELECT * FROM used WHERE make = '$make' AND model = '$model' AND year = '$year' AND disabled='0' order by id desc" );
答案 0 :(得分:1)
将查询分段构建,然后将其组合在一起。你受益于至少有一个where子句是强制性的。我使用的是短IF语法,但如果你真的想用,可以使用if(){}else{}
完全写出来。
$make = ( isset($_POST['make'] ? 'make='.$_POST['make'].' AND ' : '' );
$model = ( isset($_POST['model'] ? 'model='.$_POST['model'].' AND ' : '' );
$year = ( isset($_POST['year'] ? 'year='.$_POST['year'].' AND ' : '' );
$query = "SELECT * FROM used WHERE ".$make.$model.$year."disabled=0 ORDER BY id DESC"
$useds = mysql_query(" ");
前三行查看帖子是否已设置,如果是,则将它们从$ val转为col=$val AND
。如果不是,则变量设置为''
,并且将该变量插入查询中无效。
$variable = ( true ? 'yes' : 'no' );
$variable = ( false? 'yes' : 'no' );
第一个给你'是',第二个给'你'
然后通过在查询中将它们串在一起,您可以在查询中使用它们的任意数量:
WHERE make=$make AND disabled=0
WHERE make=$make AND model=$model AND disabled=0
WHERE make=$make AND model=$model AND year=$year AND disabled=0
WHERE year=$year AND disabled=0
如果您要将MySQL运算符/函数大写,那么您应该保持一致,以便可以分辨哪些是名称,哪些不是。
答案 1 :(得分:0)
你在马前有车。反之亦然:附加条件如果被选中。
$conditions = array();
$conditions[] = "make = '".mysql_real_escape_string($make)."'";
if (!empty($model)) $conditions[] = "model = '".mysql_real_escape_string($model)."'";
if (!empty($year)) $conditions[] = "year = '".mysql_real_escape_string($year)."'";
$conditions[] = "disabled = 0";
$conditionString = "WHERE ".implode(' AND ', $conditions);
$sql = "SELECT * FROM used ".$conditionString." ORDER BY id DESC";
答案 2 :(得分:-1)
$make = $_POST["make"];
$model = $_POST["model"];
$year = $_POST["year"];
$query="SELECT * FROM used WHERE make = '$make'";
if($model)
$query.=" AND model = '$model'";
if($year)
$query.=" AND year = '$year'";
$query.= " AND disabled='0' order by id desc";
$useds = mysql_query($query);