草庐IT

PHP MySQL 价格范围不起作用

coder 2023-10-26 原文

我正在尝试将价格范围与这样的 SELECT 下拉列表一起使用:

<select name="valor">
    <option value="" selected="selected">Faixa de Valor</option>
    <option value="100000.00 , 200000.00">De R$ 100 a 200 mil</option>
    <option value="200000.00 , 500000.00">De R$  200 a 500 mil</option>
    <option value="500000.00 , 1000000.00">De R$  500 a 1 milhão</option>
    <option value="1000000.00 , 5000000.00">De R$ 1 a 5 milhões</option>
    <option value="5000000.00">Acima de 5 Milhões</option>
</select>

我的 PHP 语句是:

$valor_query = $_POST['valor'];
$values = explode(' , ', $valor_query);
$valor1 = $values[0];
$valor2 = $values[1];
$statements .= " AND ( (property_selling.valor >= '$valor1' AND property_selling.valor >= '$valor2') OR (property_renting.valor >= '$valor1' AND property_renting.valor >= '$valor2') ) ";

但它不起作用,我有 2 个不同的表,一个用于销售,另一个用于出租,我将此语句添加为这样的变量:

$filtraSegmento = "SELECT * FROM properties, property_complements,
property_details, property_selling, property_renting 
WHERE property_complements.imovel_id = properties.property_id 
AND property_details.imovel_id = properties.property_id 
AND (property_renting.imovel_id = properties.property_id 
OR property_selling.imovel_id = properties.property_id) 
AND properties.property_status = 'Aprovado' $statements 
GROUP BY properties.property_id";

有什么提示吗?

编辑

按照@Strawberry 和@Sean 的建议,我使用 LEFT JOIN 重新创建了查询,现在它看起来像:

$filtraSegmento = "
SELECT p.*, c.*, d.*, s.*, r.* 
   FROM properties p
   LEFT 
   JOIN property_complements c
     ON c.imovel_id = p.property_id
   LEFT 
   JOIN property_details d 
     ON d.imovel_id = p.property_id
   LEFT 
   JOIN property_selling s 
     ON s.imovel_id = p.property_id
   LEFT 
   JOIN property_renting r 
     ON r.imovel_id = p.property_id
  WHERE $statements
";

它现在运行良好,但我的问题是,我将其用作过滤器,而用户继续过滤时,变量 $statements 不断添加新条件。所以我有这样的数组格式:

$statements = '';
if (isset($_POST['segmento']) && !empty($_POST['segmento'])) {
   $segmento_query = $_POST['segmento'];
    $statements .= " detail.segmento = '$segmento_query' "; //condition for each property
}
if (isset($_POST['cidade']) && !empty($_POST['cidade'])) {
   $cidade_query = $_POST['cidade'];
   $statements .= " detail.cidade = '$cidade_query '";
}
if (isset($_POST['tipo_imovel']) && !empty($_POST['tipo_imovel'])) {
   $tipo_query = $_POST['tipo_imovel'];
   $statements .= " detail.tipo_imovel = '$tipo_query '";
}
if (isset($_POST['local']) && !empty($_POST['local'])) {
   $local_query = $_POST['local'];
   $statements .= " property.property_category = '$local_query '";
}
if (isset($_POST['valor']) && !empty($_POST['valor'])) {
   $valor_query = $_POST['valor'];
       $values = explode(',', $valor_query);
       $valor1 = $values[0];
       $valor2 = $values[1];
       $statements .= " selling.valor BETWEEN '$valor1' AND '$valor2' OR renting.valor BETWEEN '$valor1' AND '$valor2' ";
}

如何将其作为新条件添加到查询中?

最佳答案

您可以像嵌套条件运算符一样尝试而不是分解提交的值。使用像 1,2,3,.. 这样的值作为选项,在你的 php 中可以这样做。

$r = $_POST["valor"]
 ".(
    empty($r) ? "" : ( ($r == "0") ? "" :
        ( ($r == "1") ? "and rent <= 5000" :
             ( ($r == "2") ? "and rent between 5000 and 10000" : "and rent > 10000" )                  
             )
        )
)."

关于PHP MySQL 价格范围不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32132051/

有关PHP MySQL 价格范围不起作用的更多相关文章

  1. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  2. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  3. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  4. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  5. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  6. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  7. Ruby 日期参数超出范围 - 2

    我正在尝试使用在我的代码中是动态的Time.local来安排时间。在每个月的第一天,我传递的值是Time.local(2009,9,-1,0)。在PHP中,这会将时间设置为上个月的最后一天。在ruby​​中,我只是得到“ArgumentError:参数超出范围”。是我用错了方法还是什么?谢谢。 最佳答案 您应该使用DateTime类而不是Time。(您可能需要先require'date'并安装activesupportgem。)它比Time更通用,并且可以用DateTime.civil(2009,9-1,-1,0)做你想做的事。为天

  8. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  9. ruby-on-rails - ruby 范围 : operators in case statement - 2

    我想检查my_number是否在某个范围内,包括较高的值。在IF语句中我会简单地使用“x>100&&x但是我应该在Ruby案例中做什么(开关)?使用:casemy_numberwhenmy_number不起作用。备注:标准范围不包括my_number恰好为500的情况,并且我不想添加第二个“when”,因为我必须编写双重内容casemy_number#between100and500when100..500puts"Correct,dosomething"when500puts"Correct,dosomethingagain"end 最佳答案

  10. Ruby - 从变量中获取位范围 - 2

    我有一个变量,想从该变量中获取一定范围的位。我想要最干净的方式来做到这一点。如果x=19767并且我想要bit3-bit8(从右边开始):100110100110111在二进制中是19767。我想要括号100110(100110)111中的部分,所以答案是38。用Ruby实现以下功能的最简单/最干净/最优雅的方法是什么?bit_range(orig_num,first_bit,last_bit)附言。计算强度较低的答案可加分。 最佳答案 19767.to_s(2)[-9..-4].to_i(2)或19767>>3&0x3f更新:从头

随机推荐