2016-12-07 30 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