【发布时间】:2012-04-17 01:07:53
【问题描述】:
我有一个查询来选择第二个表 (wp_postmeta) 上存在 1 个键/值对或另一个的帖子 (wp_posts table)。基本上,这是可行的,但我需要按第一个键/对值 (department_head) 和第二个 (staff_surname) 对结果进行排序。
问题是,由于查询获取结果的方式,没有department_head 键可用于对结果进行排序。我猜这是因为查询首先找到了staff_surname 键?
再次猜测,但如果我上面的猜测是正确的,那是因为,即使我加入了两次表,当满足staff_surname 条件时,MYSQL 只是从wp_postmeta 表中获取第一个实例。这就是我需要四处寻找的东西,以便我有正确的数据来排序结果。
完整查询 -
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND (
wp_term_relationships.term_taxonomy_id IN (34)
)
AND wp_posts.post_type = 'people'
AND (
wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private'
)
AND (
(
wp_postmeta.meta_key = 'department_head'
AND CAST(wp_postmeta.meta_value AS CHAR) = 'private-client'
)
OR (
mt1.meta_key = 'staff_surname'
AND CAST(mt1.meta_value AS CHAR) != ''
)
)
GROUP BY wp_posts.ID
ORDER BY mt1.meta_value ASC
LIMIT 0, 10
查询结果示例-
ID name meta_id post_id meta_key meta_value meta_id post_id meta_key meta_value
1 Test1 10 1 random_key random_value 11 1 staff_surname Smith
2 Test1 20 2 random_key random_value 21 2 staff_surname Jones
3 Test1 30 3 random_key random_value 31 3 staff_surname Harris
如果琼斯是部门主管,我需要的示例 -
ID name meta_id post_id meta_key meta_value meta_id post_id meta_key meta_value
1 Test1 10 1 11 1 staff_surname Smith
2 Test1 22 2 department_head private-client 21 2 staff_surname Jones
3 Test1 30 3 31 3 staff_surname Harris
'department_head' 键在绝大多数情况下不存在,这就是为什么键/值在其他结果中为空白的原因。
有没有办法达到我需要的排序结果?
注意:我在此处发布此内容而不是在 Wordpress 网站上发布的原因是因为这是一个自定义查询,不是 WP 生成的,因此它可能超出了大多数 WP 的范围专家。
【问题讨论】:
标签: mysql sql-order-by