Изменение MySQL запроса для таблиц WpDataTables - PullRequest
0 голосов
/ 21 января 2020

Я создаю таблицу в 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.

Причина в том, что я хочу воспользоваться их динамическим c заполнителем (% CURRENT_USER_ID%) вместо '1' в подзапросе выше для post_author. Например:

(SELECT * FROM `wppm_2_posts` WHERE post_author = %CURRENT_USER_ID% AND post_type = 'reviews' AND post_status = 'publish')

Есть ли другой способ написать это без использования подзапроса? Или есть другой способ создать это без использования динамического c заполнителя, такого как PHP?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 января 2020

Вот профессиональный способ (ака это не я) написания запроса. Не уверен, поможет ли это кому-то еще, но, надеюсь, это поможет.

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') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...