【发布时间】:2020-01-21 17:45:44
【问题描述】:
我正在 WpDataTables 中构建一个表格,其中涉及两种自定义帖子类型:“申请人”和“评论”。我正在尝试创建一个表格,显示所有已由正在查看 WpDataTable 的当前用户(审阅者)审阅的申请人。每个申请人可以有一个或多个评论。
这个查询的运行方式与我在 MySQL 中的要求完全一样,但是,WpDataTables 出于某种原因不喜欢它。我相信这是因为子查询。
SELECT a.ID, r.post_title, a.post_title, a.guid, r.post_type, a.post_type, r.post_author,
b.meta_value review_app_score,
c.meta_value review_app_comment
FROM (SELECT * FROM `wppm_2_posts` WHERE post_author = 1 AND post_type = 'reviews' AND post_status = 'publish') as r
RIGHT JOIN `wppm_2_posts`as a ON r.post_title = a.ID
LEFT JOIN `wppm_2_postmeta` b ON r.ID = b.post_id AND b.meta_key='review_app_score'
LEFT JOIN `wppm_2_postmeta` c ON r.ID = c.post_id AND c.meta_key='review_app_comment'
WHERE a.post_type = 'applicants'
AND a.post_status = 'publish'
这是 MySQL 的结果: https://i.stack.imgur.com/KzvHt.png
这正是我所需要的,除了我需要它在 WpDataTables 中工作。
原因是我希望利用他们的动态占位符 (%CURRENT_USER_ID%) 而不是上面 post_author 子查询中的“1”。 如:
(SELECT * FROM `wppm_2_posts` WHERE post_author = %CURRENT_USER_ID% AND post_type = 'reviews' AND post_status = 'publish')
有没有其他方法可以在不使用子查询的情况下编写它?或者还有另一种不需要动态占位符(例如 PHP)的方式来构建它?
感谢任何帮助。
【问题讨论】:
-
混合使用
left joins 和right joins 会使查询非常难以理解。 -
@gordonLinoff 我可以理解。不幸的是,根据我所拥有的知识,我构建查询的方式是最好的。