我今天有一個包含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
是否有可能使用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