2017-08-28 74 views
0

試圖檢索所有user_id的那些user_id符合3條件。WordPress的Usermeta選擇多個鍵和值

我的代碼是

$sql = " 
SELECT user_id 
FROM {$wpdb->usermeta} 
WHERE (({$wpdb->usermeta}.meta_key = 'job_title' AND {$wpdb- 
>usermeta}.meta_value = '".$job_title."') OR 
({$wpdb->usermeta}.meta_key = 'pmpro_bstate' AND {$wpdb- 
>usermeta}.meta_value = '".$state."') OR 
({$wpdb->usermeta}.meta_key = 'pmpro_baddress2' AND {$wpdb- 
>usermeta}.meta_value = '".$suburb."')) 
GROUP BY 
    user_id 
HAVING 
    COUNT(DISTINCT meta_key)=3"; 

較低()所需要的價值和變量來準確地比較?

是否有更高效的方式來執行此查詢?

乾杯

回答

0

最好就是做這個用的INNER JOIN:

$sql = "SELECT u.ID 
FROM wp_users u 
INNER JOIN wp_usermeta m1 ON u.ID = m1.user_id AND m1.meta_key = 'job_title' 
INNER JOIN wp_usermeta m2 ON u.ID = m2.user_id AND m2.meta_key = 'pmpro_bstate' 
INNER JOIN wp_usermeta m3 ON u.ID = m3.user_id AND m3.meta_key = 'pmpro_baddress2' 
WHERE m1.meta_value = '".$job_title."' 
AND m2.meta_value = '".$state."' 
AND m3.meta_value = '".$suburb."'" 
+0

是什麼讓INNER JOIN更好地使用?並且還要感謝你 – David

+0

每個連接都會創建一個更小的數據集,而且處理速度更快(並且MySQL服務器優化處理連接的方式比其他處理多個表的方法更好,因此它比其他方法具有更高的性能優勢) 是連接速度較慢的情況(尤其是如果將LEFT和INNER混合在一起),但在這種情況下,讀取查詢和基於數據處理的速度要快得多,更簡單。 –