【问题标题】:Wordpress - SQL query on two custom fields issueWordpress - 关于两个自定义字段问题的 SQL 查询
【发布时间】:2010-10-26 17:46:12
【问题描述】:

到目前为止,我已经收到了这个查询:


if(!empty($_SESSION['s_property_region'])) {
    $sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_region' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_region']."'";
}
if(!empty($_SESSION['s_property_bedrooms'])) {
    $sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_bedrooms' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_bedrooms']."'";
}
$sql    =   "SELECT $wpdb->posts.ID
             FROM $wpdb->posts
             LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
             WHERE $wpdb->posts.post_status = 'publish'
             AND $wpdb->posts.post_type = 'property'
             ".$sqlWHERE."
             ORDER BY $wpdb->posts.post_date DESC";

如果我只搜索一个自定义字段而不是两个一起搜索,它会起作用。我知道为什么,因为 LEFT Join 的工作方式。不会有一行 post_type 可以同时是两个东西。

加入后我会得到这样的结构:

|身份证 |元密钥 |元值 | | 1 | property_region |东 | | 1 | property_卧室 | 4 | | 2 | property_region |西 | | 2 | property_卧室 | 2 |

有没有查询可以把两张表变成这样的结构:

|身份证 | property_region | property_卧室 | | 1 |东 | 4 | | 2 |西 | 2 |

如果查询可以使表格如上所示,那么我的简单 WHERE this=that AND this=that 将起作用。

非常感谢您对此事的任何帮助

谢谢

斯科特

编辑:经过一番搜索,我现在将这段代码放在一起:http://pastebin.com/5YYDLyeR 它可以工作并返回我所追求的结构,但是一旦我尝试在 property_region 和 property_bedrooms 上执行 WHERE,我得到:#1054 - 未知“where 子句”中的“property_bedrooms”列

EDIT2:好的,我已经使用了 PMV 代码并且能够执行我的 WHERE 子句,我必须执行一个子查询:http://pastebin.com/dvTgsU7S 此代码可以满足我的要求,但有没有更好的方法来实现此查询?当我在数据库中有 1000 多个条目时,我认为性能将是一个问题......

【问题讨论】:

    标签: php sql wordpress left-join custom-fields


    【解决方案1】:

    将您的整个查询输入如下内容:

    SELECT ID
    ,      MAX(CASE WHEN meta_key = 'property_region' THEN meta_value END) AS property_region
    ,      MAX(CASE WHEN meta_key = 'property_bedrooms' THEN meta_value END) AS property_bedrooms
    FROM (your query)
    GROUP BY ID
    HAVING MAX(CASE WHEN meta_key = 'property_region' THEN meta_value END) = 'east'
    AND    MAX(CASE WHEN meta_key = 'property_bedrooms' THEN meta_value END) = 4
    

    编辑:HAVING 子句。这很丑,但我认为这就是你要找的。您仍然必须在 php 代码中构建它,但我认为它应该可以满足您的需求。

    【讨论】:

    • 您的查询给了我与我的问题中的 EDIT 位相同的问题。 pastebin.com/r24ffig6 是我现在拥有的 SQL,它比我拥有的更整洁,但是当我尝试在 property_region 或 property_bedrooms 上执行 WHERE 子句时,我仍然收到错误消息 #1054 - Unknown column 'property_bedrooms' in 'where子句'
    • 我对代码进行了编辑,试一试,我认为它应该可以满足您的需求。
    • 感谢 PMV 我确实从我找到的其他一些代码中找到了 HAVING 解决方案,我现在正在使用这个解决方案。被跟踪并忘记用我找到的解决方案更新这篇文章。但你还是打败了我:P
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2013-08-12
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多