SQL嵌套插入查询
我今天有一个包含3个查询统计信息的数据库。我使用PHP来建立一个网站,但查询需要很长的时间来执行,所以我不能显示完整的网站统计数据,因为我不想做。因为现在数据库很少分批更新,所以我可以为此目的每天/每周更新数据库。SQL嵌套插入查询
我有以下3个查询今天显示我想要的信息:
SELECT key FROM testcase GROUP BY key;
这让我从4-10组测试与诠释列表。争论的情况下说1,2,3,4。 我然后在子查询的关键重复此得到的不具有下列2个查询通过测试的顺利通过测试的数量和数量:
SELECT COUNT(*) AS passed FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid WHERE pass = 1 AND key = %value%;
和
SELECT COUNT(*) AS failed FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid WHERE pass = 0 AND key = %value%;
这是它目前的工作方式。查询每个键需要大约25-30秒,这使得该站点超时。 (%value%是来自for循环的当前值的伪代码)
相反,我想到的是一个sql查询,它将这个数据库表添加到由每天/每周填充的关键,通过,失败表组成的数据库表作为统计数据显示在网站上。我已经看到了一些你可以迭代子查询的情况,但是因为2个执行的查询是相反的,我看不到任何解决方案。
我试图索引我在查询中使用的值没有成功(这可能是错误的)。
//安德烈亚斯(SQL新手)
编辑:
哦困境,在哪里设置的解决方案,我从戈登和乔相结合,使这工作就像一个最快的查询魅力:
INSERT INTO statistics (key,passed,failed)
SELECT
key,
SUM(case when T.pass = 1 then T.matches else 0 end) as passed,
SUM(case when T.pass = 0 then T.matches else 0 end) as failed
FROM
(SELECT
key,pass,COUNT(*) AS matches
FROM testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid
GROUP BY key,pass)T
GROUP BY key
我认为你应该做这一切都与一个查询,返回你想要的密钥和信息:可能
select key,
SUM(case when pass = 1 AND key = %value% then 1 else 0 end) as passed,
SUM(case when pass = 0 AND key = %value% then 1 else 0 end) as failed
from testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid
group by key
在一定程度上,你应该让数据库做“迭代”和刚才读返回结果数据。
回复您的评论。如果您在$值键列表,那么你可以做:
insert into statistics(key, pass, fail)
select key,
SUM(case when pass = 1 then 1 else 0 end) as passed,
SUM(case when pass = 0 then 1 else 0 end) as failed
from testcase INNER JOIN testcases ON
testcase.ID = testcases.testcaseid
where concat(',', $VALUE, ',') like concat('%', key, '%')
group by key
或者,如果要生成的查询,你可以把在in
条款清单。因此,where
可能看起来像:
where key in (2, 3, 4, 5)
尝试:
select key, pass, count(*) from testcase group by key, pass
pass
上的索引将无济于事。索引key
,这应该有所帮助。但是以4-10的基数,meh,不会超级有用。
工作得很好得到的名单,从统计表格中插入它仍然一步。我会看看是否可以使用此查询获得更好的反馈,并在php中进行迭代。 – Andreas 2013-03-04 20:30:24
是否有可能使用sql查询插入%value%插槽中的密钥?我正在思考沿着INSERT的行进入statistcis(键,通过,失败),然后是该查询。 – Andreas 2013-03-04 19:50:47
嗯,第二个看起来很有前途,但是我在phpMyAdmin中超时,明天会尝试使用mysqlquerybrowser和直接访问工作。在(SELECT键FROM FROM testcase GROUP BY键)_中添加查询_where键并尝试执行该操作。 – Andreas 2013-03-04 20:28:16