1

我已经查看了所有类似的已解决问题,但我还没有找到解决方案。

所以在这个 wordpress 中有房屋和电路(自定义帖子类型)。一所房子可以连接多个电路(中继器自定义字段)。查询被动态构建以从 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)

...检索具有 circuito_0_ci = 194 的 houseA 并检索两次具有 circuito_0_ci = 194 和 circuito_1_ci = 189 关联的 houseB。

那么我应该修改什么来过滤掉重复项?我做错了什么?

更新1:更多信息

帖子的表模式(p) 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') 才能工作。

谢谢!

4

1 回答 1

1

您使用 DISTINCT *. 这意味着如果任何一列中的一个值不同(来自不同的行),它将被显示。

相反,您应该做的是写 distinct 后跟您感兴趣的特定列。

所以,如果你只对特定的房子感兴趣——

例子:

select distinct houses
FROM ...

使用您的格式:

select distinct
p.post_type
    FROM ...

您还可以GROUP BY用来计算房屋拥有的不同电路的数量。

于 2013-11-13T22:24:15.670 回答