2013-05-06 53 views
0

這裏是我的代碼是工作,但速度很慢:我可以在單個MySQL命令中激發兩條select語句並計算結果行嗎?

$graded = R::getAll("SELECT posts.id, posts.discussion, rating.rating, rating.itemid 
          FROM uv_forum_posts posts 
          JOIN uv_rating rating ON (posts.id = rating.itemid) 
          WHERE posts.discussion = :discussion_id 
          GROUP BY posts.userid", 
          array(':discussion_id' => $discussion['id'])); 

    $total = R::getAll("SELECT posts.userid 
         FROM uv_forum_posts posts 
         WHERE posts.discussion = :discussion_id 
         GROUP BY userid", 
         array(':discussion_id' => $discussion['id'])); 

    $percentages[] = count($graded)/count($total) * 100; 

$graded表示有等級的所有行。

$total代表所有用戶參與,無論是否被評分。

我只對結果集的數值感興趣,我可以將這兩個MySQL調用合併爲一次調用,返回兩個數字gradedtotal

回答

1

如果我正確理解你的要求,你可以嘗試

SELECT p.userid, 
     COUNT(*) total, 
     COUNT(r.itemid) graded 
    FROM uv_forum_posts p LEFT JOIN 
     uv_rating r ON p.id = r.itemid 
WHERE p.discussion = :discussion_id 
GROUP BY p.userid 

輸出:

| USERID | TOTAL | GRADED | 
--------------------------- 
|  1 |  8 |  2 | 
|  2 |  4 |  4 | 

SQLFiddle

UPDATE:如果你只是想爲所有的帖子和用戶總計然後

SELECT COUNT(*) total, 
     COUNT(r.itemid) graded 
    FROM uv_forum_posts p LEFT JOIN 
     uv_rating r ON p.id = r.itemid 
WHERE p.discussion = 1 

輸出:

| TOTAL | GRADED | 
------------------ 
| 12 |  6 | 

SQLFiddle

+0

謝謝,這有助於加快查詢顯着。它還不是那裏。運行這個查詢我得到我想要的,但然後我需要將所有'TOTAL'全部添加到'$ total'中,並且所有'GRADED'都以PHP手動添加到'$ graded'中。有什麼辦法可以將這個簡單的添加到MySQL,所以它只是在查詢本身返回這些值?感謝您的時間和幫助! – sergserg 2013-05-07 13:38:55

+0

@Serg不客氣。查看更新的答案和sqlfiddle。 – peterm 2013-05-07 17:07:50

0

你可以簡單地使用查詢作爲格式:

Select 
(SELECT posts.id, posts.discussion, rating.rating, rating.itemid 
          FROM uv_forum_posts posts 
          JOIN uv_rating rating ON (posts.id = rating.itemid) 
          WHERE posts.discussion = :discussion_id 
          GROUP BY posts.userid, 
          array(':discussion_id' => $discussion['id']))) gradeCount, 

(SELECT posts.userid 
         FROM uv_forum_posts posts 
         WHERE posts.discussion = :discussion_id 
         GROUP BY userid, 
         array(':discussion_id' => $discussion['id'])))totalCount 
相關問題