我已经查看了所有类似的已解决问题,但我还没有找到解决方案。
所以在这个 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') 才能工作。
谢谢!