【发布时间】: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