2016-12-07 64 views
1

我需要你的建議來遍歷並返回數據庫中的值(如下所示)。數據庫的結構由另一個應用程序設置。MySQL聲明的性能和優化

系統目前如何返回與ID = 6的用戶的值在此情況下:

查找項實例和項目模塊(1和訓練),並返回行ID。使用該行ID,查找對應的itemid和用戶ID在表2

grade_grades

Table1

grade_items

Table2

當前SQL /功能:

功能1 {SELECT ID FROM grade_items WHERE itemmodule ='訓練'和iteminstan CE = '1'}(返回ID)

功能2 {用返回的ID,運行以下:SELECT * FROM grade_grades WHERE的itemid = '4' 和用戶ID = '6'}(返回finalgrade)

有沒有更容易的方法來獲得所有這些在一個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

使用JOIN爲C來自兩個或多個表的ombine行

SELECT * 
FROM grade_grades 
JOIN grade_items ON grade_grades.id = grade_items.itemid 
WHERE itemid = 4