Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 价格范围查询返回不准确的结果_Php_Mysql - Fatal编程技术网

Php 价格范围查询返回不准确的结果

Php 价格范围查询返回不准确的结果,php,mysql,Php,Mysql,我有一个搜索表单,用户可以在其中搜索指定价格范围内的产品。 其中,我有2个输入框1用于起始范围,另一个用于结束范围 我的数据库表中有3个产品商店。价格分别为2300.0000,1200.0000,1000.5000 我在选择输入价格范围内的值时遇到问题。问题是,当我输入如下值时 100起始范围到1100结束范围。1200.0000的产品 显示的是1000.5000,而不是仅显示1000.5000 产品 0起始范围至1100结束范围或1000.50结束范围。这个 显示的是1200.0000和100

我有一个搜索表单,用户可以在其中搜索指定价格范围内的产品。 其中,我有2个输入框1用于起始范围,另一个用于结束范围

我的数据库表中有3个产品商店。价格分别为
2300.0000
1200.0000
1000.5000

我在选择输入价格范围内的值时遇到问题。问题是,当我输入如下值时

  • 100
    起始范围到
    1100
    结束范围。
    1200.0000的产品
    显示的是
    1000.5000
    ,而不是仅显示
    1000.5000
    产品
  • 0
    起始范围至
    1100
    结束范围或
    1000.50
    结束范围。这个 显示的是
    1200.0000
    1000.5000
    的产品,而不是 仅限
    1000.5000
    产品
  • 1100
    起始范围。只有带有
    2300.0000
    的产品才可以使用 显示,而不是同时显示
    2300.0000
    1200.0000
    。但是当 起始值小于或等于
    500
    所有3种产品均为 正在展示
  • 这是我正在使用的代码

    function db_prepare_input($string)
    {
        if (is_string($string)) {
            return trim(stripslashes($string));
        } elseif (is_array($string)) {
            reset($string);
            while (list($key, $value) = each($string)) {
                $string[$key] = db_prepare_input($value);
            }
            return mysql_real_escape_string($string);
        } else {
            return mysql_real_escape_string($string);
        }
    }
    
    $pricefrom_key = db_prepare_input(number_format($_GET['pricefrom'], 4, '.', ''));
    $priceto_key = db_prepare_input(number_format($_GET['priceto'], 4, '.', ''));
    
    // Price Range
    if (!empty($_GET['pricefrom']) && !empty($_GET['priceto'])) {
        $price_range = " having price >= ".$pricefrom_key." and price <= ".$priceto_key;
    }
    elseif(empty($_GET['pricefrom']) && !empty($_GET['priceto']))
    {
        $price_range = " having price >= 0 and price <= ".$priceto_key;
    }
    
    elseif(!empty($_GET['pricefrom']) && empty($_GET['priceto']))
    {
        $price_range = " having price >= ".$pricefrom_key;
    }
    
    elseif(!empty($_GET['pricefrom']) && !empty($_GET['priceto']))
    {
        $price_range = "";
    }
    
    $catglobal_sql = "select p.blog_id, p.global_category_id, p.products_id, p.products_currency, p.products_type, p.products_name, p.products_description, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_weight, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.products_ordered, p.specials_new_products_price, p.specials_date_added, p.specials_last_modified, p.expires_date, p.date_status_change, p.status, p.display_product, case when (p.specials_new_products_price > 0 or p.specials_new_products_price != 0000-00-00 and p.expires_date > Now() and p.status != 0) then p.specials_new_products_price else p.products_price end price from ".TABLE_GLOBAL_PRODUCTS." p INNER JOIN ".TABLE_STORES." s ON s.blog_id = p.blog_id where MATCH (p.products_name,p.products_description) AGAINST ('%".$search_key."%') OR p.products_name like '%".$search_key."%' and s.countries_id = '168' ".$search_cat." and p.display_product = '1' and p.products_status = '1' ".$price_range." order by p.products_date_added DESC, p.products_name";
    

    有什么问题吗???

    这条线你到底在干什么

    $price_range = " having price >= ".$pricefrom_key." and price <= ".$priceto_key;
    
    {


    如果($price\u range>=$price from\u key&&$price\u range运算符位于“”中,表示文本,它们将被忽略。我希望这是有意义的。

    我发现了问题。.问题出在案例上。.我已将其修改为当p.specials\u new\u products\u price>=0.0000且p.expires\u date>现在()p.status!=0然后p.specials\u new\u products\u price else p.products\u price end price

    数据库中的价格字段定义为什么?是数字还是文本?看起来您的搜索是按字母顺序而不是按数字顺序搜索的……价格是什么字段类型的?我可以问一下为什么您使用HAVING子句而不是添加WHERE子句中的价格信息?@andrewsi我猜是因为我使用了,
    case when(p.specials\u new\u products\u price>0或p.specials\u new\u products\u price!=0000-00-00和p.expires\u date>Now()和p.status!=0)然后p.specials\u new\u products\u price else p.products\u price end price
    有人告诉我使用
    having子句
    ,这很公平;这不是我经常使用的东西-文档中有一条评论,说只在聚合子句中使用它,我不知道
    case
    是否算数……也许值得把它放到WHE中RE子句以查看它是否会更改结果?他正在尝试构建SQL查询,而不是创建输出。这无关紧要。他的价格范围规范仍然错误。我的示例只是指向正确的方向。如果他需要SQL查询,他应该请求它。请参阅上面的编辑。。。。。
    $price_range = " having price >= ".$pricefrom_key." and price <= ".$priceto_key;
    
    if (!empty($_GET['pricefrom']) && !empty($_GET['priceto']))
    
          if($price_range >= $pricefrom_key && $price_range <= $priceto_key)
          {
          echo "you are in the pricerange from" .$pricefrom_key." to ".$priceto_key;
          } 
    //etc......
    }
    
    $price_range = " having price >= ".$pricefrom_key." and price <= ".$priceto_key;