我對在WordPress至極的帖子過濾工作從postsmeta使用數據: 我的日期過濾器工作,使我這個查詢:Wordpress查詢添加INNER/LEFT JOIN。爲什麼或如何去除/防止INNER/LEFT JOIN?
工作查詢結果:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE 1=1 AND YEAR(wp_posts.post_date)=2017
AND MONTH(wp_posts.post_date)=03 AND wp_posts.post_type = 'projects'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future'
OR wp_posts.post_status = 'draft' OR wp_posts.post_status = 'pending'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 20
When I filter by postmeta.meta_value I get an extra INNER JOIN which is causing issues:
Filter (not exactly working):
$query->set('meta_query', array(
array(
'key' => 'project_cust_id',
'value' => $project_cust_id,
'compare' => '='
)
));
查詢(不工作結果):
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
WHERE 1=1 AND ((wp_postmeta.meta_key = 'project_cust_id'
AND wp_postmeta.meta_value = '12345')) AND wp_posts.post_type = 'projects'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future'
OR wp_posts.post_status = 'draft' OR wp_posts.post_status = 'pending'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC LIMIT 0, 20
當我查詢這種直入我的數據庫,我得到下面沒有結果和錯誤,但是當我刪除多餘的線:INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
或當我刪除行:LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
我確實得到了預期的結果。
EDIT: MySQL returns error: Not unique value table/alias: 'wp_postmeta'
我的問題是:
- 爲什麼我的代碼又增加了INNER JOIN?
- 如何移除/防止這種額外的INNER JOIN或LEFT JOIN?
任何幫助,將不勝感激。
您正在過濾(即刪除不匹配的記錄),所以LEFT OUTER JOIN沒有任何意義。 – Kickstart
我已經更新了我的帖子/問題,因爲我可以刪除左邊或內部連接,在這兩種情況下,它都會給出結果。 但我仍然不知道如何從SQL語句中刪除其中的一個連接。 –
「wp_postmeta」表中沒有數據,但「wp_posts」中有相同的數據。 也許你需要思考爲什麼你沒有這個post_id的「wp_postmeta」中的數據? –