【问题标题】:Key Value Pair Comparison键值对比较
【发布时间】:2013-01-23 01:04:09
【问题描述】:
SELECT wposts.*, wpostmeta.*
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2, $wpdb->postmeta wpostmeta3
    WHERE wposts.ID = wpostmeta.post_id
        AND wposts.ID = wpostmeta2.post_id
        AND wposts.ID = wpostmeta3.post_id
        AND wpostmeta.meta_key = 'listing_subtype'
            AND wpostmeta.meta_value = '$search_home_type'
        AND wpostmeta2.meta_key = 'district'
            AND wpostmeta2.meta_value = '$search_district'
        AND wpostmeta3.meta_key = 'price_current'
            AND wpostmeta3.meta_value IS >= '$search_price_min' AND <= '$search_price_max'
        AND wposts.post_status = 'publish'
        AND wposts.post_type = 'vreb_property'
    ORDER BY wposts.post_date DESC

AND wpostmeta3.meta_value IS &gt;= '$search_price_min' AND &lt;= '$search_price_max' 行试图确保 meta_key price_currentmeta_value 大于 $search_price_min 并且小于 $search_price_max p>

这行不通...

[You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<= '100000' AND wposts.post_status = 'publish' AND wposts.post_type = 'vreb_' at line 11]

【问题讨论】:

  • 是显示无效的 SQL 语句还是没有返回您想要的结果?
  • 此时声明无效。我尝试在该语句周围添加方括号,但这似乎没有什么不同。
  • 去掉IS &gt;= 中的IS应该是wpostmeta3.meta_value &gt;= '$search_price_min' AND &lt;= '$search_price_max'
  • (可以试试 BETWEEN,AND wpostmeta3.meta_value BETWEEN '$search_price_min' and '$search_price_max'
  • 是的,我打赌@MichaelBerkowski 是对的

标签: php mysql sql wordpress


【解决方案1】:
AND wpostmeta3.meta_value IS >= '$search_price_min' AND <= '$search_price_max'

需要

AND wpostmeta3.meta_value >= '$search_price_min'
AND wpostmeta3.meta_value <= '$search_price_max'

【讨论】:

  • 这就是原因。谢谢,英汉。如果我的search_price_max 是 800000 但没有更低,为什么我的结果似乎有效?这很奇怪,因为 current_price 只是 59000
  • @dcolumbus 好吧,这取决于。 meta_value 列的数据类型是什么?您在查询中使用的最小值和最大值是什么?
  • 好吧,meta_value 应该是一个字符串......并且最小值是 0 而最大值是 1000000000 或其他。如果数字不是以1 开头...更正,600000 之后的任何内容,它似乎总是返回一个结果@
  • 如果您尝试根据数字评估值,为什么首先要在它们周围使用单引号?
  • 就是这样!当然!单引号会阻止数字被评估!谢谢!
【解决方案2】:
AND <= '$search_price_max'

&lt;= 应该是什么?您错过了该运算符的参数:这就是错误。

你的意思可能是:

AND wpostmeta3.meta_value <= '$search_price_max'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2020-04-10
    • 2019-01-07
    相关资源
    最近更新 更多