昨天我有一個similar question爲一個系統搜索關鍵字的特定postmeta字段。
如果任何一個字段包含搜索詞,上述鏈接上的答案將返回帖子。
但是,下面的改進版本會返回找到關鍵字的多少個(在關鍵字的0到#之間,而不是在每個字段中找到的關鍵字的實際計數)。
僅供參考後期元和用戶元表基本上是相同的東西,這應該適合你。您可以使用wordpress查詢對象進行設置,但是我的代碼是自定義SQL,因爲它是一個獨立腳本 - 除了WordPress之外。
SELECT *
FROM (
SELECT
post.ID as post_id,
(IF ((
post.post_title LIKE '%c++%'
OR post.post_content LIKE '%c++%'
OR meta_field_a.meta_value LIKE '%c++%'
OR meta_field_b.meta_value LIKE '%c++%'
), 1, 0)
+ IF ((
post.post_title LIKE '%java%'
OR post.post_content LIKE '%java%'
OR meta_field_a.meta_value LIKE '%java%'
OR meta_field_b.meta_value LIKE '%java%'
), 1, 0)) AS occurrences
FROM wp_posts post
JOIN wp_postmeta meta_field_a ON (meta_field_a.post_id = post.ID AND meta_field_a.meta_key = 'field_a')
JOIN wp_postmeta meta_field_b ON (meta_field_b.post_id = post.ID AND meta_field_b.meta_key = 'field_b')
WHERE post.ID IN (212, 213, 214)
GROUP BY post.ID
) AS results
WHERE results.occurrences > 0
的「IF」語句塊檢查所述關鍵字,並返回1或0,如果他們被發現或沒有發現(在任何領域)。這被加在一起產生「出現次數」,這是每行返回的。
「JOIN」語句塊通過鍵名拉入單個元。每個元鍵都需要它自己的連接,但顯然這不是一個昂貴的操作。
「WHERE」語句將過濾器限制爲指定的帖子ID。這些來自外部函數,但您可以用自己的where語句替換它以手動檢查帖子類型/狀態。但是,既然你在處理用戶,你可能根本不需要那裏的WHERE(或者你想檢查其他用戶元,比如角色)。
謝謝,我結束使用JOINS也... – user1049961