【问题标题】:Modifying MySQL Query for WpDataTables修改 WpDataTables 的 MySQL 查询
【发布时间】: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 我可以理解。不幸的是,根据我所拥有的知识,我构建查询的方式是最好的。

标签: mysql sql wordpress


【解决方案1】:

这是编写查询的专业方式(也不是我)。不确定它是否会帮助其他人,但希望它会。

SELECT 
    APPLICANTS.ID AS applicants_id
    ,APPLICANTS.post_title AS applicants_post_title
    ,APPLICANTS.guid AS applicants_guid
    ,APPLICANTS.post_type AS applicants_post_type
    ,REVIEWS.post_author AS reviews_author_id
    ,REVIEWS.post_type AS reviews_post_type
    ,REVIEWS.post_title AS reviews_post_title
    ,R_APP_SCORES.meta_value AS review_app_score
    ,R_APP_COMMENTS.meta_value AS review_app_comment
FROM 
    `%WPDB%posts` AS APPLICANTS 
    LEFT JOIN
    `%WPDB%posts` AS REVIEWS ON
        (REVIEWS.post_author = %CURRENT_USER_ID%) AND     
        (REVIEWS.post_title = APPLICANTS.ID) AND 
        (REVIEWS.post_type = 'reviews') AND 
        (REVIEWS.post_status = 'publish')
    LEFT JOIN 
    `%WPDB%postmeta` R_APP_SCORES ON
        (R_APP_SCORES.post_id = REVIEWS.ID) AND 
        (R_APP_SCORES.meta_key = 'review_app_score')
    LEFT JOIN 
    `%WPDB%postmeta` R_APP_COMMENTS ON 
        (R_APP_COMMENTS.post_id = REVIEWS.ID) AND
        (R_APP_COMMENTS.meta_key = 'review_app_comment')
WHERE 
    (APPLICANTS.post_type = 'applicants') AND
    (APPLICANTS.post_status = 'publish') 

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 2012-02-22
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多