Mysql ステートメントに実際の問題があります。いくつかのテーブルを結合し、クエリを実行して、別のテーブルの値の平均で並べ替える必要があります。これは私が持っているものです...
SELECT
ROUND(avg(re.rating), 1)AS avg_rating,
s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
GROUP BY staff_id
ORDER BY avg_rating DESC
「SELECTはMAX_JOIN_SIZE行を超える行を調べます。WHEREを確認し、SELECTが問題ない場合はSET SQL_BIG_SELECTS = 1またはSET SQL_MAX_JOIN_SIZE = #を使用してください」というエラーが表示されますが、これでうまくいくと思います。
これは、結合が多すぎることを意味すると思います。共有ホスティングであるため、大きなクエリを実行できないため、わかりません。
私が知りたいのは、エラーが正確に何を意味するか (Google で検索しましたが、答えがわかりません)、クエリをより効率的にすることでどのように回避できるかです。
どんな助けでも大歓迎です。ありがとう
編集:
結合が必要な理由は、検索機能に基づいてテーブルをクエリできるようにするためです...
SELECT
ROUND(avg(re.rating), 1)AS avg_rating
, s.staff_id, s.full_name, s.mobile, s.telephone, s.email, s.drive
FROM staff s
INNER JOIN staff_homes sh
ON s.staff_id=sh.staff_id
INNER JOIN staff_positions sp
ON s.staff_id=sp.staff_id
INNER JOIN reliability re
ON s.staff_id=re.staff_id
INNER JOIN availability ua
ON s.staff_id=ua.staff_id
WHERE s.full_name LIKE '%'
AND s.drive = '1'
AND sh.home_id = '3'
AND sh.can_work = '1'
AND sp.position_id = '3'
AND sp.can_work = '1'
GROUP BY staff_id
ORDER BY avg_rating DESC
編集2
これが私の説明の結果でした。また、MYSQL が苦手なのですが、どうすれば外部キーを設定できますか?
id select_type テーブル タイプ possible_keys キー key_len ref 行 エクストラ
1 SIMPLE ua ALL NULL NULL NULL NULL 14 一時的な使用。ファイルソートの使用
1 SIMPLE re ALL NULL NULL NULL NULL 50 where; の使用 結合バッファの使用
1 SIMPLE sp ALL NULL NULL NULL NULL 84 where の使用。結合バッファの使用
1 SIMPLE sh ALL NULL NULL NULL NULL 126 where の使用。結合バッファの使用
1 SIMPLE s eq_ref PRIMARY PRIMARY 4 web106-prestwick.ua.staff_id 1
編集 3: おかげで、それは私の外部キーでした。正しく設定されていませんでした。問題が分類されました