我一直在使用相同的SQL查詢幾個小時,它終於工作。但是,這是非常緩慢..我一直在試圖優化它,但沒有運氣,任何幫助。下面是該查詢(批號的左連接...):股票與緩慢的SQL查詢
$sql ="SELECT u.id, u.display_name, IFNULL(SUM(r.total_rating)/COUNT(r.total_rating), 0) AS avg_rating, s.title AS study FROM users u
LEFT JOIN rating r ON u.id = r.user_id
LEFT JOIN usermeta m ON u.id = m.user_id
LEFT JOIN usermeta m1 ON u.id = m1.user_id
LEFT JOIN studies s ON m.meta_value = s.id
WHERE m.meta_key = 'study' AND m1.meta_key = 'subjects' AND m1.meta_value REGEXP '$subjectsvalues'
GROUP BY u.id, r.total_rating
ORDER BY avg_rating DESC
LIMIT 10";
表結構,用戶表:
id | display_name | email
-------------------------
1 | Khar | ...
2 | SantaCruz | ...
表結構的評價表:
id | rating_title | total_rating | user_id
-------------------------------------------
1 | dffd | 5 | 1
2 | fddfdffdd | 4 | 1
的表結構usermeta表格:
id | user_id | meta_key | meta_value
-------------------------------------
1 | 1 | study | 132
2 | 1 | subjects | 121,231
爲研究表表結構:
id | title
----------
1 | dsdsf
2 | sdfdf
主題值,像這樣的處理:
$subjectsvalues = '';
$subjects = explode(",", $subjects);
foreach($subjects as $val) {
$subjectsvalues = $subjectsvalues.",".$val.",|";
}
$subjectsvalues = $subjectsvalues."notdata";
這是很多左連接。請編輯您的問題以包含表格的表格結構以及您的預期結果。 –
嗨@JenR,我已更新帖子,謝謝! –
你確定查詢結果是否正確?您正在按'r.total_rating'進行分組,並在同一列上計算「SUM」和「COUNT」agreggates。我認爲這個分組應該放在'u.id,u.display_name,s.title' – Xint0