开发者

Combine total count for entries in 2 SQL tables

I can't seem to find the right way to do this so I was hoping someone could give me some direction?

The SQL Database is structured like this (I've removed the irrelevant stuff):

Requests
R_ID    R_FulfilledBy
1       Bob
2       Craig
3       Bob

SIMs
SM_ID   SM_FulfilledBy
1       Bob
2       Craig
3       Bob

I'm hoping to end up with this output:

Fulfilled By    Requests
Bob         4
Craig       2

Here's my PHP/HTML:

<div id="table">
        <?php

            //Connect to MySQL Database
            $connection = mysql_connect($runnerdbServer, $runnerdbUser, $runnerdbPass);
            mysql_select_db($开发者_JAVA技巧runnerdbName, $connection) or die("MysQL Error");

                            $query = "SELECT R_FulfilledBy, COUNT(R_ID) FROM Requests GROUP BY R_FulfilledBy ORDER BY COUNT(R_ID) DESC"; 


                            $result = mysql_query($query) or die(mysql_error());



        ?>

    <!-- Number of Runners (Counts total number of records in Requests table) -->
    <table border='0' width='50%'>
        <tr>
        <th>Runners Fulfilled</th>
        <tr><td><?php
            $query = mysql_query("SELECT * FROM Requests");
            $number=mysql_num_rows($query);
            echo $number; 
            ?>
        </td></tr>
    </table>
    &nbsp;

    <!-- Fulfillment Stats -->
    <table border='0' width='50%'>
        <tr>
        <th>Name</th>
        <th>Runners Fulfilled</th>
        </tr>

    <?
    // Print out result (I want this to calculate requests fulfilled by each user in 'Requests' and 'SIMs' table)
    while($row = mysql_fetch_array($result)){
    echo "<tr>";
    echo "<td>". $row['R_FulfilledBy'] ."</td>";
    echo "<td>". $row['COUNT(R_ID)'] ."</td>";
    echo "</tr>";
    }

    ?>

    </table>

At present it's only calculating the records from the 'Requests' table :(


You could union all the two tables together in a subquery:

select  FulfilledBy
,       count(*)
from    (
        select  R_FulfilledBy as FulfilledBy
        from    Requests
        union all
        select  SM_FulfilledBy
        from    SIMs
        ) as SubQueryAlias
group by
        FulfilledBy

Use union all instead of union because the second eliminates duplicates; which would give everyone a maximum count of 1.


I'd go with this:

SELECT R_FulfilledBy, COUNT(*) + 
( SELECT COUNT(*) FROM SIMs WHERE R_FulfilledBy = SM_FulfilledBy )
FROM Requests GROUP BY R_FulfilledBy
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜