php - 带有 LIKE 和 BETWEEN 的 mysql 语句不起作用

标签 php mysql

我有这个 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/

相关文章:

php - 如何查找给定日期最近的第 25 天或第 10 天并将其添加到数据库中

php - 为什么有人访问我的网站时我的数据库没有更新?

mysql - Wordpress Transfer Broke CSS - 图像+链接工作

MySql:如何使用带有 Sum 的 group_concat 修复 mysql 查询?

mysql - 我如何知道哪些事务首先运行

java - 如何在选择期间使用另一个表中的列的值设置表列值

php - 尝试访问服务器上的数据库时出错 : Lost connection to MySQL server

php - SQL inner join 将整数转换为文本

php - 当从 mysql 获取超过 1000 个结果时,如何更快地加载网页?

php - 是否可以在 $_GET | 中设置/插入新变量$_POST | $_ session |来自 TWIG 的 $_COOKIE?