【问题标题】:SQL Query Price CompareSQL查询价格比较
【发布时间】:2013-10-07 09:03:36
【问题描述】:

我正在运行 SQL 查询来搜索我的数据库。我目前可以搜索所有内容,直到我比较价格。

没有价格比较的工作代码

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom');

价格比较破代码

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') AND price BETWEEN ('0') AND  ('10000000000')";

关于为什么这不起作用的任何想法,我已经检查并且我的所有表都正确命名。

【问题讨论】:

  • 你打印这个查询直接在mysql中执行了吗?
  • 我认为价格应该是十进制/双精度/货币。你在这里测试字符串值!
  • 我已经在数据库上运行了两个查询,我没有收到任何错误,但是工作代码给了我一个列表,而损坏的什么也没做。 @Nadeem_MK - 价格存储在我的数据库中的字符串中
  • 将价格存储为字符串不好... :-) 您需要使用CAST()-函数来进行数值比较...请提供一些示例数据!跨度>

标签: php sql search


【解决方案1】:

单引号表示 SQL 中的字符串,因此使用它们将导致您的查询进行字典比较。 如果您删除它们,您将获得您可能想要的数字比较。此外,由于您将 price 作为字符串,您可能还需要转换它。

$query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') AND CAST (price AS DECIMAL) BETWEEN (0) AND  (10000000000)";

【讨论】:

    【解决方案2】:

    我认为价格应该是十进制/双精度/货币。你在这里测试字符串值!

    $query = "SELECT * FROM propertie_ids 
    WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') 
    AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') 
    AND price BETWEEN 0 AND 10000000000";
    

    如果价格存储在字符串中,则必须对其进行转换,因为您不能在两个字符串之间声明一个字符串!

    $query = "SELECT * FROM propertie_ids 
    WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') 
    AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') 
    AND CAST(price as DECIMAL(10,2)) BETWEEN 0 AND 10000000000";
    

    【讨论】:

      【解决方案3】:

      http://sqlfiddle.com/#!2/abbcb/4/0

      我认为 price 列应该是 INT ,你应该从查询中删除引号,它会起作用。您可以使用 price*1

      代替 cast
      $query = "SELECT * FROM propertie_ids WHERE (`search` LIKE '%".$searchquery."%') AND (`location` = '$location') AND (`bathroom` = '$bathroom') AND (`bedroom` = '$bathroom') AND price BETWEEN 0 AND  10000000000";
      

      `SELECT * FROM test where price*1 between '5' and '13'`
      

      这里 0 到 10000000000 表示它也包括 0 和 10000000000。 我建议介于 1 到 10000000000 之间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多