我已经查看了所有类似的已解决的问题,但我还没有找到解决方案。
所以在这个wordpress中有房屋和电路(自定义帖子类型)。房子可以连接几个电路(转发器自定义字段)。该查询以dinamically方式构建,以从IDS列表中检索与任何电路关联的所有房屋。
这有效,但当它有多个匹配的电路时,它会重复一个房子。例如:
SELECT DISTINCT *
FROM reoask5_posts p
INNER JOIN reoask5_postmeta pm_ci ON p.ID = pm_ci.post_id
WHERE p.post_type = 'casa'
AND p.post_status = 'publish'
AND pm_ci.meta_key LIKE 'circuito|__|_ci' ESCAPE '|'
AND (pm_ci.meta_value = 194 OR pm_ci.meta_value = 189)
...检索houseA,其中circuito_0_ci = 194并检索两次 houseB,其中circuito_0_ci = 194且circuito_1_ci = 189相关联。
那么我应该修改什么来过滤掉重复的内容呢?我做错了什么?
UPDATE1:更多信息
The table schema for posts(p) The table schema for postmeta(pm_ci)
仍然效果不佳。从post数据库中选择特定列会过滤掉重复项。但它无法像普通的wordpress循环一样循环结果。即使我选择了所有列:
SELECT DISTINCT p.id, p.post_author, p.post_date, p.post_date_gmt, p.post_content, p.post_title, p.post_excerpt, p.post_status, p.comment_status, p.ping_status, p.post_password, p.post_name, p.to_ping, p.pinged, p.post_modified, p.post_modified_gmt, p.post_content_filtered, p.post_parent, p.guid, p.menu_order, p.post_type, p.post_mime_type, p.comment_count
它给了我错误:
Notice: Undefined property: stdClass::$ID in .... line 250
Notice: Undefined property: stdClass::$ID in .... line 251
// etc...
这是定义查询后出现的简化php代码。选择特定列时,所有这些调用都会失败:
$total_posts= $wpdb->get_results($query);
foreach ($total_posts as $post){
$post->post_name;
get_permalink($post->ID);
$coordenadas = get_field( "coords", $post->ID);
// ...
}
如果我将metaposts中的所有4列添加到SELECT行:
... p.comment_count, pm_ci.meta_id, pm_ci.post_id, pm_ci.meta_key, pm_ci.meta_value
在尝试使用这些函数时,它仍然会给我带来错误,当我使用SELECT *
我不知道在这种情况下我应该如何使用group by。还在学习。
UPDATE2:找到解决方案
错误的原因是因为SELECT DISTINCT p.id
应该读取SELECT DISTINCT p.ID
。 SQL查询以不区分大小写的方式返回ID,将其存储在密钥“id”中,但wordpress函数需要使用大写字母(“ID”)才能工作。
谢谢!
答案 0 :(得分:1)
您使用DISTINCT *
。这意味着如果任何一列中的一个值不同(来自不同的行),它将被显示。
你应该做什么,是写不同的,然后是你感兴趣的特定列。
所以,如果你只对特定的房子感兴趣 -
示例:强> 的
select distinct houses
FROM ...
使用您的格式:
select distinct
p.post_type
FROM ...
您还可以使用GROUP BY
来计算一所房子的不同电路数量。