尽管使用DISTINCT,Wordpress Mysql wpdb查询重复

时间:2013-11-13 22:16:50

标签: mysql sql wordpress wpdb

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

所以在这个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”)才能工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

你应该做什么,是写不同的,然后是你感兴趣的特定列。

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

示例:

select distinct houses
FROM ...

使用您的格式:

select distinct
p.post_type
    FROM ...

您还可以使用GROUP BY来计算一所房子的不同电路数量。