我試圖在Stackoverflow上找到這個問題的解決方案,也許我的措辭是錯誤的。
我有一個查詢,執行起來需要很長時間。我相信有一些簡單的方法來改善它。例如,我使用了兩次相同的子查詢來顯示兩個不同的列(sum和count),但在試圖自己解決這個問題時遇到了幾個錯誤。
SELECT u.ID。
u.user_email as mail,
u.user_login AS userName。
u.user_registered AS signUpDate,
(select meta_value from wp_usermeta where user_id =u. ID and meta_key = 'first_name' 限制 1) as firstName,
(select meta_value from wp_usermeta where user_id =u. ID and meta_key = 'last_name' limit1) as lastName,
(select meta_value from wp_usermeta where user_id =u. ID and meta_key = 'billing_phone' limit1) as billingPhone,
(select meta_value from wp_usermeta where user_id =u. ID and meta_key = 's shipping_phone' limit1) as shippingPhone,
(SELECT COUNT(meta_value) from wp_postmeta WHERE meta_key = '_order_total' and post_id IN (select post_id from wp_postmeta where meta_value = u. ID and meta_key = '_customer_user') as orderCount,
(SELECT SUM(meta_value) from wp_postmetaWHERE meta_key = '_order_total' and post_id IN (select post_id from wp_postmeta where meta_value = u. ID and meta_key = '_customer_user') as moneySpent
FROM wp_users u;
uj5u.com熱心網友回復:
你的查詢的問題是,你有嵌套的相關子查詢。相關的子查詢是對SQL性能的一個巨大打擊。在這種情況下,你要嘗試使用帶有聚合功能的連接(group by)。
我不了解你的資料庫模式的復雜性,所以我不太清楚你為什么要把firstName等的子查詢限制在1條記錄內。如果你提供更多的細節,我可以編輯答案以適應這個問題。
我建議你試試這樣的方法:
SELECT u.ID。
u.user_email as mail,
u.user_login AS userName。
u.user_registered AS signUpDate。
mfn.meta_value as firstName,
mln.meta_value as lastName,
mbp.meta_value as billingPhone,
msp.meta_value as shippingPhone,
COUNT(pval.meta_value) as orderCount,
SUM(pval.meta_value) as moneySpent
FROM wp_users u
JOIN wp_usermeta as mfn ON u.ID = mfn。 user_id AND mfn.meta_key = 'first_name'。
JOIN wp_usermeta as mln ON u.ID = mln。 user_id AND mln.meta_key = 'last_name'。
JOIN wp_usermeta as mbp ON u.ID = mbp。 user_id AND mbp.meta_key = 'billing_phone'。
JOIN wp_usermeta as msp ON u.ID = msp。 user_id AND msp.meta_key = 'shipping_phone'。
JOIN wp_postmeta as p ON p.meta_value = u。 ID AND p.meta_key = '_customer_user'。
JOIN wp_postmeta as pval ON pval.post_id = p。 post_id AND pval.meta_key = '_order_total'
GROUP BY u.ID。
u.user_email,
u.user_login,
u.user_registered,
mfn.meta_value,
mln.meta_value,
mbp.meta_value,
msp.meta_value
按照@O.Jones的評論,考慮使用LEFT JOINS而不是INNER JOINS,這樣查詢仍然可以回傳缺少meta_value的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332007.html
標籤:
