我正在尝试创建自定义SELECT
查询,以便从WordPress自定义类型中查找我的个人最佳比赛,其中时间是自定义元字段。
这是我用来选择帖子的查询。我已将其简化为调试,但最终我想选择几个术语slug并使用MIN
找到每个GROUP BY
:
SELECT t.slug,
p.ID,
p.post_date,
p.post_title,
m.meta_value as pb_mins
FROM $wpdb->posts p,
$wpdb->postmeta m,
$wpdb->term_relationships tr,
$wpdb->term_taxonomy tt,
$wpdb->terms t
WHERE p.ID = tr.object_id
AND p.ID = m.post_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND tt.term_id = t.term_id
AND p.post_type = 'runs'
AND m.meta_key = 'ssr_duration_min'
AND t.slug in ('10mi')
(我正在将结果输出到数组并使用print_r
暂时检查它。)
这将选择带有“10mi”术语的两个比赛/跑步,并为他们显示正确的时间/日期/标题。
当我添加MIN
函数时出现问题:
SELECT t.slug,
p.ID,
p.post_date,
p.post_title,
MIN(m.meta_value) as pb_mins
选择了正确的(最短)时间,但其他详细信息(日期,标题)来自其他10mi跑/比赛。
我已经尝试将FROM
子句更改为使用LEFT JOIN
和INNER JOIN
但是同样的事情发生了:它可以选择'10mi'并且输出错误输出我添加了MIN
函数。
感谢您提供的任何帮助。这是我在这里的第一篇文章,所以如果我需要添加更多细节,请告诉我。
答案 0 :(得分:1)
我从未接受过发布我的解决方案。现在已经有一段时间了,所以我无法完全记住我是如何到达它的(最有可能是试验和错误),但如果这对任何人都有帮助,我们欢迎它们。如果我想到更多细节,我会将它们作为评论添加到这个答案中。
SELECT p1.ID,
m1.meta_value,
t1.name
FROM $wpdb->posts p1,
$wpdb->postmeta m1,
$wpdb->term_relationships tr1,
$wpdb->term_taxonomy tt1,
$wpdb->terms t1,
( SELECT t2.slug as pb_distance,
MIN(m2.meta_value) as pb_duration
FROM $wpdb->posts p2,
$wpdb->postmeta m2,
$wpdb->term_relationships tr2,
$wpdb->term_taxonomy tt2,
$wpdb->terms t2
WHERE p2.ID = tr2.object_id
AND p2.ID = m2.post_id
AND tr2.term_taxonomy_id = tt2.term_taxonomy_id
AND tt2.term_id = t2.term_id
AND p2.post_type = 'runs'
AND p2.post_status = 'publish'
AND m2.meta_key = 'ssr_duration_min'
AND t2.slug IN $slugs
GROUP BY t2.slug ) pb
WHERE p1.ID = m1.post_id
AND p1.ID = tr1.object_id
AND tr1.term_taxonomy_id = tt1.term_taxonomy_id
AND tt1.term_id = t1.term_id
AND p1.post_type = 'runs'
AND p1.post_status = 'publish'
AND m1.meta_key = 'ssr_duration_min'
AND t1.slug in $slugs
AND m1.meta_value = pb.pb_duration
ORDER BY meta_value+0
答案 1 :(得分:0)
我使用的另一个选项,也适用于略有不同的查询,如下所示:
SELECT p.ID,
m.meta_value,
t.name
FROM $wpdb->posts p,
$wpdb->postmeta m,
$wpdb->term_relationships tr,
$wpdb->term_taxonomy tt,
$wpdb->terms t
WHERE p.ID = m.post_id
AND p.ID = tr.object_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND tt.term_id = t.term_id
AND p.post_type = 'runs'
AND p.post_status = 'publish'
AND m.meta_key = 'ssr_duration_min'
AND t.slug IN $slugs
ORDER BY meta_value+0
LIMIT 1
这基本上按值排序并仅采用第一个答案,即。最低限度。