2016-12-07 12 views
1

以下に示すように、データベースをトラバースして値を返す最適な方法についてアドバイスが必要です。データベースの構造は別のアプリケーションによって設定されます。項目インスタンスとアイテムモジュール(1及び訓練)用MySQLの文のパフォーマンスと最適化

ルック行IDを返す:システムは現在この場合、ID = 6を持つユーザの値を返す方法

。この行のIDを使用して、テーブル内の対応するアイテムIDおよびユーザIDを探し2

grade_grades

Table1

grade_items

Table2

現在のSQL /機能:

機能1 {SELECT ID FROM grade_items where itemmodule = 'トレーニング'とiteminstan返されたIDを使用して、CE = '1'}(IDを返す)

関数2は、{、以下を実行する:アイテムID = grade_grades SELECT * FROM '4' ANDユーザーID = '6'}(戻りfinalgrade)

2つのクエリを実行するのではなく、1つのMYSQL文でこれをすべて取得する簡単な方法はありますか? (私が求めているのは、これらのクエリのそれぞれが100〜10000回実行される可能性があるからです。リスト内のユーザー数に応じて、現在、サーバーを実行すると約15分間停止します。 (合計を計算するpagenationなし)すべてのレコードのクエリ

+0

共通の列に「結合」することができます。何かありますか? – Rahul

+0

データベースに適切なインデックスがありますか? – cichy

答えて

1

ちょうどそれらを一緒に参加する:

SELECT g.* 
FROM grade_items g 
JOIN grade_grades g2 
ON(g2.id = g.itemid) 
WHERE g2.itemmodule = 'training' and g2.iteminstance = '1' 

または代わりに、IN()を使用します。

SELECT g.* 
FROM grade_items g 
WHERE g.itemid IN(SELECT g2.id FROM grade_grades g2 
        WHERE g2.itemmodule = 'training' 
        and g2.iteminstance = '1') 
0

使用は、cであるを登録しよう2つ以上のテーブルから行を区別する

SELECT * 
FROM grade_grades 
JOIN grade_items ON grade_grades.id = grade_items.itemid 
WHERE itemid = 4 
関連する問題