Я использую WpDataTables для Wordpress plugin. Однако это общий mySQL Query, и до этого момента он работает нормально.

SELECT posts_apex_po.ID AS apex_po_ID,
posts_apex_po.post_title AS apex_po_post_title,
posts_apex_po_payment.ID AS apex_po_payment_ID,
posts_apex_po_payment.post_title AS apex_po_payment_post_title
FROM wp_posts AS posts_apex_po, wp_posts AS posts_apex_po_payment
WHERE 1=1 
AND posts_apex_po.post_status = 'publish'
AND posts_apex_po.post_type = 'apex_po'
AND posts_apex_po_payment.post_status = 'publish'
AND posts_apex_po_payment.post_type = 'apex_po_payment'

Проблема в том, что когда я пытаюсь получить мета-значения для пользовательских типов сообщений apex_po или apex_po_payment, это не работает.

apex_po_payment имеет мета-ключ apex_po_meta.purchase_order, значение которого равно apex_po ID

Итак, в основном Apex_PO - это заказ на покупку, и когда вы создаете платеж с помощью apex_po_payment, вы выбираете apex_po ID, чтобы связать его.

Я пытаюсь отобразить связанный PO & PO Payment, но он не работает. Любая помощь?

0
Wali Hassan 28 Дек 2015 в 09:54

2 ответа

Лучший ответ

Я смог разобраться в этом самостоятельно после небольшого поиска здесь и там и понимания запросов соединения mysql. Мне пришлось сделать два отдельных запроса для каждого настраиваемого типа сообщения в той же таблице mysql, а затем оставить их в нужном поле.

Отправка ответа для любого, кто столкнется с той же проблемой в будущем.

SELECT * FROM ( 
    SELECT 
    posts_apex_po.ID AS apex_po_id,
    posts_apex_po.post_title AS apex_po_post_title,
    apex_po_meta_grand_total_tbl.meta_value AS apex_po_meta_grand_total,

FROM wp_posts AS posts_apex_po
  INNER JOIN (SELECT apex_po_meta_grand_total_tbl_posts.ID as id, meta_value, meta_key  FROM wp_postmeta AS apex_po_meta_grand_total_tbl_postmeta  INNER JOIN wp_posts AS apex_po_meta_grand_total_tbl_posts   ON apex_po_meta_grand_total_tbl_postmeta.post_id = apex_po_meta_grand_total_tbl_posts.ID   AND apex_po_meta_grand_total_tbl_posts.post_type = 'apex_po') AS apex_po_meta_grand_total_tbl
     ON apex_po_meta_grand_total_tbl.meta_key = 'grand_total' AND apex_po_meta_grand_total_tbl.id = posts_apex_po.ID 
WHERE 1=1 
   AND posts_apex_po.post_status = 'publish'
   AND posts_apex_po.post_type = 'apex_po' ) x

LEFT JOIN

( SELECT posts_apex_po_payment.post_date AS apex_po_payment_post_date,
       posts_apex_po_payment.post_title AS apex_po_payment_post_title,
       apex_po_payment_meta_amount_paid_tbl.meta_value AS apex_po_payment_meta_amount_paid,
       apex_po_payment_meta_purchase_order_tbl.meta_value AS apex_po_payment_meta_purchase_order
FROM wp_posts AS posts_apex_po_payment
  INNER JOIN (SELECT apex_po_payment_meta_amount_paid_tbl_posts.ID as id, meta_value, meta_key  FROM wp_postmeta AS apex_po_payment_meta_amount_paid_tbl_postmeta  INNER JOIN wp_posts AS apex_po_payment_meta_amount_paid_tbl_posts   ON apex_po_payment_meta_amount_paid_tbl_postmeta.post_id = apex_po_payment_meta_amount_paid_tbl_posts.ID   AND apex_po_payment_meta_amount_paid_tbl_posts.post_type = 'apex_po_payment') AS apex_po_payment_meta_amount_paid_tbl
     ON apex_po_payment_meta_amount_paid_tbl.meta_key = 'amount_paid' AND apex_po_payment_meta_amount_paid_tbl.id = posts_apex_po_payment.ID 
  INNER JOIN (SELECT apex_po_payment_meta_purchase_order_tbl_posts.ID as id, meta_value, meta_key  FROM wp_postmeta AS apex_po_payment_meta_purchase_order_tbl_postmeta  INNER JOIN wp_posts AS apex_po_payment_meta_purchase_order_tbl_posts   ON apex_po_payment_meta_purchase_order_tbl_postmeta.post_id = apex_po_payment_meta_purchase_order_tbl_posts.ID   AND apex_po_payment_meta_purchase_order_tbl_posts.post_type = 'apex_po_payment') AS apex_po_payment_meta_purchase_order_tbl
     ON apex_po_payment_meta_purchase_order_tbl.meta_key = 'purchase_order' AND apex_po_payment_meta_purchase_order_tbl.id = posts_apex_po_payment.ID 
WHERE 1=1 
   AND posts_apex_po_payment.post_status = 'publish'
   AND posts_apex_po_payment.post_type = 'apex_po_payment' ) y
ON  y.apex_po_payment_meta_purchase_order = x.apex_po_id
0
Wali Hassan 30 Дек 2015 в 06:44

В соответствии с указанным вами запросом вы пытаетесь получить сообщение с двумя типами сообщений одновременно.

AND posts_apex_po.post_type = 'apex_po'
AND posts_apex_po_payment.post_type = 'apex_po_payment'

Невозможно, чтобы в одном сообщении одновременно были два разных типа сообщений, поэтому вы должны ИЛИ между ними.

-1
daniyalahmad 28 Дек 2015 в 07:11