私は数時間同じ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
テーブル構造ユーザテーブル:
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、私はポストを更新しました、ありがとう! –
クエリの結果はOKですか?あなたは 'r.total_rating'でグループ化し、' SUM'を計算し、 'COUNT'は同じ列で一致させます。グループ化は 'u.id、u.display_name、s.title'にあるべきだと思う。 – Xint0