[英]MYSQL slow query when getting total rows from another table using while loop
我是mysql
新手,我试图从另一个表中获取所有ID
,其中ID等于table 1
ID和其他条件。
表格1
+---------------+
| ID model line |
+---------------+
| 1 XX C1 |
| 2 AA C3 |
| 3 SS C1 |
+---------------+
表2(因此,如果我的查询是ID = 1 AND model = XX GROUP BY line
行,则表2的总行将返回3,因为ID 1,4和5为true。
+----------------------------+
| ID InspectionID model line |
+----------------------------+
| 1 1 XX C1 |
| 2 1 AA C3 |
| 3 1 SS C1 |
| 4 1 XX C2 |
| 5 1 XX C4 |
+----------------------------+
到目前为止,我在PHP while循环内有此查询,它返回我想要的内容,但查询速度很慢。
$query = "SELECT * FROM table2 WHERE inspectionID = '$ID' AND model = '$modelID' GROUP BY line
所以我认为最好的方法是加入table1和table2并添加一列,可悲的是,我对mysql
了解和加入表的知识是有限的,任何建议都是值得的。
我的目标是在下面创建。
+---------------------+
| ID model line total |
+---------------------+
| 1 XX C1 3 |
| 2 AA C3 0 |
| 3 SS C1 0 |
+---------------------+
非常简单的连接和聚合。 工作演示 (注释演示包括到目前为止的答案和结果。)
我们离开了联接,因此我们保留了表1中的所有记录,并联接到表2中以获取与表1匹配的记录。我们对联接本身设置了模型限制,以便在联接发生之前将过滤应用于表2。 因此该计数将仅包括模型XX,而模型的所有其他计数将为零。
SELECT T1.ID, T1.Model, T1.Line, count(T2.ID)
FROM table1 T1
LEFT JOIN Table2 T2
on T1.Model = T2.Model
and T2.Model = 'XX'
GROUP BY T1.ID, T1.Model, T1.Line
ORDER BY T1.ID
只需创建一个SQL视图 :
CREATE VIEW TABLE_1_2_VIEW AS
SELECT A.id, A.model, A.line, B.inspectionID, COUNT(B.ID) Total
FROM table_1 A LEFT JOIN table_2 B
ON A.model=B.model
GROUP BY A.id, A.model, A.line, B.inspectionID
ORDER BY A.id, A.model, A.line;
您可以从该视图中查询数据,就好像它是一个表一样。
SELECT id, model, line, IF(model='XX', Total, 0) Total
FROM TABLE_1_2_VIEW
WHERE inspectionID=1;
只是此视图中的数据不可更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.