Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按两个键/值对排序查询结果,其中键/值对的字段相同_Mysql_Sql Order By - Fatal编程技术网

Mysql 按两个键/值对排序查询结果,其中键/值对的字段相同

Mysql 按两个键/值对排序查询结果,其中键/值对的字段相同,mysql,sql-order-by,Mysql,Sql Order By,我有一个查询来选择posts(wp\u posts表),其中第二个表(wp\u postmeta)上有一个键/值对或另一个键/值对。本质上,这是可行的,但我需要按照第一个键/对值(部门负责人)和第二个(员工姓氏)对结果进行排序 问题是,由于查询获取结果的方式不同,因此没有department\u head键可用于对结果进行排序。我猜这是因为查询首先查找staff\u姓氏键 再次猜测,但是如果我上面的猜测是正确的,那是因为,即使我加入了两次表,MYSQL只是在满足staff\u姓氏条件时从wp\u

我有一个查询来选择posts(
wp\u posts表
),其中第二个表(
wp\u postmeta
)上有一个键/值对或另一个键/值对。本质上,这是可行的,但我需要按照第一个键/对值(
部门负责人
)和第二个(
员工姓氏
)对结果进行排序

问题是,由于查询获取结果的方式不同,因此没有
department\u head
键可用于对结果进行排序。我猜这是因为查询首先查找
staff\u姓氏

再次猜测,但是如果我上面的猜测是正确的,那是因为,即使我加入了两次表,MYSQL只是在满足
staff\u姓氏
条件时从
wp\u postemta
表中获取第一个实例。这就是我需要找到的,这样我就有了正确的数据,能够对结果进行排序

完整查询-

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
“部门负责人”键在绝大多数情况下都不存在,这就是为什么其他简历上的键/值为空

有没有办法达到我要求的订购结果


注意:与Wordpress站点相反,我之所以在这里发布此消息,是因为这是一个自定义查询,而不是WP生成的,因此,这可能超出了大多数WP专家的范围。

我不确定,但我将尝试使用一些左连接来实现这一点,并将条件移动到连接,以提高查询效率

类似的东西可能会起作用

SELECT p.*
FROM wp_posts p
INNER JOIN wp_term_relationships r ON 
    (p.ID=r.object_id AND r.term_taxonomy_id=34)
LEFT JOIN wp_postmeta m1 ON 
    (p.ID=m1.post_id AND m1.meta_key='department_head' AND CAST(m1.meta_value AS CHAR)='private-client')
LEFT JOIN wp_postmeta m2 ON 
    (p.ID=m2.post_id AND m2.meta_key = 'staff_surname' AND CAST(m2.meta_value AS CHAR) != '')
WHERE 
    p.post_type = 'people' 
  AND 
    (p.post_status = 'publish' OR p.post_status = 'private')
GROUP BY p.ID
ORDER BY m1.meta_value DESC, m2.meta_value DESC
LIMIT 0, 10

我永远也不知道你到底是怎么从袋子里拿出那个的!工作起来很有魅力,完全满足了我的需要,在启动时,我发现我能够通过强大的WP过滤器进行查询,所以需要的编码要少得多。唯一非常微小的变化是我必须将
m1.meta_值ASC
更改为
DESC
。非常感谢你的帮助。非常感谢,我相信其他人将来会觉得这很有帮助。