我一直在使用相同的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