我有这个 mysql 语句,它同时使用 LIKE 和 BETWEEN 语句:
$stmt1 = $db->prepare("SELECT * FROM forsale WHERE `make` LIKE ?
OR `model` LIKE ? AND `year` BETWEEN ? AND ? OR `price` BETWEEN ?
AND ? LIMIT $start,$perpage");
$stmt1->execute(array($searchQuery1,$searchQuery2,$searchQuery3,
$searchQuery4,$searchQuery5,$searchQuery6));
$rows1 = $stmt1->fetchAll();
当我这样写声明时:
$firstWorking = $db->prepare("SELECT * FROM forsale WHERE `make` LIKE ?
OR `model` LIKE ? LIMIT $start,$perpage");
它工作正常,当我隔离 BETWEEN 时也是如此:
$secondWorking = $db->prepare("SELECT * FROM forsale WHERE `year` BETWEEN ? AND ?
OR `price` BETWEEN ? AND ? LIMIT $start,$perpage");
所有 LIKE 语句都执行得很好,但我遇到的问题是,当 LIKE 语句位于 BETWEEN 语句前面时,BETWEEN 语句不起作用。当我选择一个范围(例如 1999-2008)时,不会返回任何结果,但如果我选择一个具有指定型号或品牌的日期范围,它只显示型号和品牌的结果,忽略 Between 语句。如有任何帮助,我们将不胜感激!
最佳答案
我在编程方面比一年前聪明多了。当 $_GET 变量为空时,我必须构建一个自定义解决方案,它们将被替换为“%%”通配符或自定义整数,例如表示起始年份的“1982”。答案如下::
if(isset($_GET['selectMake'])){
$selectMake = '%'.$_GET['selectMake'].'%';
} else {
$selectMake = '%%';
}
if(isset($_GET['selectModel'])){
$selectModel = '%'.$_GET['selectModel'].'%';
} else {
$selectModel = '%%';
}
if(isset($_GET['engineType'])){
$engineType = '%'.$_GET['engineType'].'%';
} else {
$engineType = '%%';
}
if(isset($_GET['transmission'])){
$transmission = '%'.$_GET['transmission'].'%';
} else {
$transmission = '%%';
}
if(!empty($_GET['startYear'])){
$startYear = $_GET['startYear'];
} else {
$startYear = '1982';
}
if(!empty($_GET['endYear'])){
$endYear = $_GET['endYear'];
} else {
$endYear = '2099';
}
if(!empty($_GET['minPrice'])){
$minPrice = $_GET['minPrice'];
} else {
$minPrice = '5000.00';
}
if(!empty($_GET['maxPrice'])){
$maxPrice = $_GET['maxPrice'];
} else {
$maxPrice = '1000000.00';
}
$stmt1 = $db->prepare("SELECT * FROM forsale WHERE (`make` LIKE ? OR `model` LIKE ?) AND (`transmission` LIKE ?) AND (`year` BETWEEN ? AND ?) AND (`price` BETWEEN ? AND ?) AND (`engineType` BETWEEN ? AND ?) LIMIT ?,?");
$stmt1->execute(array($selectMake,$selectModel,$transmission,$startYear,$endYear,$minPrice,$maxPrice,$minEngine,$maxEngine,$start,$perpage));
$rows1 = $stmt1->fetchAll();
关于php - 带有 LIKE 和 BETWEEN 的 mysql 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24073572/