1

だから、私は寄付テーブルを持っています。$ の値と、金銭的寄付または現物寄付を選択する列ボックスが格納されます。現物寄付には $ を付けることができますが、通常は付けません。現物寄付とは、誰かが芝刈り機、テーブル、椅子などの物理的なアイテムを寄付した場合です。それから私はドナーを持っています。最後に、Leadership Giving Group があります。特定の金額に基づいて、寄付者はリーダーシップ寄付グループの 1 つに入れられます。したがって、100 ドルの寄付者は他の寄付者グループに入れられ、1000 ドルの寄付者は次のグループに入れられます。すべての寄付を合計する必要がありますが、すべての現物寄付は除外します。これは、(金銭的価値がある場合でも) 寄付者をリーダーシップ グループのどこに配置するかにはカウントされないためです。

テーブル: SHOW CREATE を実行できませんでした。これは、変更する必要があるサーバーの値を制御できないためです。これが誰にとっても大丈夫であることを願っています。3 つのテーブルとそのすべての現在のフィールドを表示したかっただけです。ご不便をおかけして申し訳ありません。

テーブルのすべての構文を覚えることはできませんでしたが、外部キーと主キー、およびすべてのフィールドがそこにあることを確認するのは簡単なはずです。感謝祭で、私の家族は私がコンピューターを使用していることに腹を立てているので、ちょっと急いでいます.

CREATE TABLE donor (
DonorID INT NOT NULL AUTO_INCREMENT Primary Key,
FirstName VARCHAR(100),
LastName VARCHAR(100),
Street Address VARCHAR(100),
City VARCHAR(100),
State VARCHAR(2),
Zip VARCHAR(5),
Email VARCHAR(100), );

制限は、ドロップ ボックスで選択する 2 つのエントリのうちの 1 つです。制限付き(特定のプロジェクトの寄付者によって指定されているか、制限なしを意味する寄付者はお金がどのように使われるか気にしません。寄付タイプは同じように機能しますが、現物または金銭のいずれかです。私はちょうど合計したい金銭的価値

CREATE TABLE donation (
DonationID INT NOT NULL AUTO_INCREMENT Primary Key,
Restriction VARCHAR(10) NOT NULL,
Amount VARCHAR(100) NOT NULL,
Description VARCHAR(2000),
DonationType VARCHAR(100) NOT NULL,
DonorID INT NOT NULL Foreign Key,
DateReceived DATE NOT NULL,

LeadershipGroup テーブル: 食べ終わったら追加します。申し訳ありませんが、私の家族は私を殺そうとしています.

LeaderGrp は AI ではなく、各リーダーシップ グループ (その他の寄付者、創設者のクラブ、友人のサークルなど) の名前です。これは常に一意なので、PK にしましたが、何らかの理由と AI フィールドでそれを行うことができます。

それが簡単になるなら、コードを投稿できますが、人々にとって巨大なテキストの壁になるように感じます. ただし、これは Web サイトであり、このプロジェクトで使用した他のプログラミング言語は js と php であるため、php で可能であれば、それもオプションです。また、ウェブサイトへのリンクを提供し、情報を表示できるようにすることもできます。現在、すべてが構成されているためです。明らかに、実際のデータを共有することはできません。何人かの人々が入り込んで私のテーブルにデータを追加し始めるかもしれないときに、私は本当にそれを投稿したくなかったので、それを求めてください.

コード:

<?php require_once('header.php') ?>
<!--dont modify above this line-->

<?php 
//on ANY page you need to use the database, you need to include the line below ONCE (before doing any db operations)
require_once('connect.php');

function checkAmount($amount, $min, $max)
{
if ($amount >= $min && $amount <= $max)
return true;
else
return false;

} 


//array types of users
$founders_club = array();
$headmasters_circle = array();
$dragons_circle = array();
$green_and_white_society = array();
$seventies_society = array();
$millennium_society = array();
$dome_society = array();
$tunnel_society = array();
$friends_circle = array();
$others = array();

// fiscal year
$currentyear = date("Y");
$selectedyear = $_POST["selectedYear"];
if($selectedyear == "")
$selectedyear = $currentyear;
$startdate = $selectedyear . "-07-01";
$enddate = $selectedyear + 1 . "-06-30";

//we need to put all donors inside the dropdown box, this is how to do it
//the actual query
$result = mysql_query("SELECT * FROM donor;") or die (mysql_error());
echo "<h2>Publication List</h>";
echo "<div>Choose Fiscal Year:";
//this will iterate through every record in the resultset and create an option box
echo "<form id=\"fiscal\" action=\"q1.php\" method=\"POST\">
<select name=\"selectedYear\" onchange=\"document.getElementById('fiscal').submit();\">";
for($i=$currentyear; $i >= 2011; $i--)
{
    if ($i == $selectedyear)
    echo "<option value='".$i."' selected=\"selected\">".$i."</option>";
    else
    echo "<option value='".$i."'>".$i."</option>";
}
echo "</select></form>";
echo "</div><br>";
//this will iterate through every record in the resultset and create an option box
while($row = mysql_fetch_array($result))
{

$result2 = mysql_query("SELECT SUM(DonationAmount) FROM donations Where DonorID = ".$row['DonorID'] . " and donations.Date_Received BETWEEN '" . $startdate . "' and '" . $enddate . "'" ) or die (mysql_error());
    while($row2 = mysql_fetch_array($result2))
        {
        $amount = $row2['SUM(DonationAmount)'];         

        if (checkAmount($amount, 50000, 999999))    
        array_push($founders_club, $row['DisplayName']);

        if (checkAmount($amount, 25000, 49999))
        array_push($headmasters_circle, $row['DisplayName']);

        if (checkAmount($amount, 10000, 24999))
        array_push($dragons_circle, $row['DisplayName']);

        if (checkAmount($amount, 5000, 9999))
        array_push($green_and_white_society, $row['DisplayName']);

        if (checkAmount($amount, 2500, 4999))
        array_push($seventies_society, $row['DisplayName']);

        if (checkAmount($amount, 1000, 2499))
        array_push($millennium_society, $row['DisplayName']);

        if (checkAmount($amount, 500, 999))
        array_push($dome_society, $row['DisplayName']);

        if (checkAmount($amount, 250, 499))
        array_push($tunnel_society, $row['DisplayName']);

        if (checkAmount($amount, 100, 249))
        array_push($friends_circle, $row['DisplayName']);

        if (checkAmount($amount, -1, 99))
        array_push($others, $row['DisplayName']);

        }

}


        //display results
    if(count($founders_club) > 0)   
    {
    echo "<h2>Founder's Club</h2>";
    for ($i = 0; $i < count($founders_club); $i++) 
    echo $founders_club[$i] . "<br>";
    }

    if(count($headmasters_circle) > 0)  
    {
    echo "<h2>Headmaster's Circle</h2>";
    for ($i = 0; $i < count($headmasters_circle); $i++) 
    echo $headmasters_circle[$i] . "<br>";
    }

    if(count($dragons_circle) > 0)  
    {
    echo "<h2>Dragon's Circle</h2>";
    for ($i = 0; $i < count($dragons_circle); $i++) 
    echo $dragons_circle[$i] . "<br>";
    }

    if(count($green_and_white_society) > 0) 
    {
    echo "<h2>Green and White Society</h2>";
    for ($i = 0; $i < count($green_and_white_society); $i++) 
    echo $green_and_white_society[$i] . "<br>";
    }

    if(count($seventies_society) > 0)   
    {
    echo "<h2>1970's Society</h2>";
    for ($i = 0; $i < count($seventies_society); $i++) 
    echo $seventies_society[$i] . "<br>";
    }

    if(count($millennium_society) > 0)  
    {
    echo "<h2>Millennium Society</h2>";
    for ($i = 0; $i < count($millennium_society); $i++) 
    echo $millennium_society[$i] . "<br>";
    }

    if(count($dome_society) > 0)    
    {
    echo "<h2>Dome Society</h2>";
    for ($i = 0; $i < count($dome_society); $i++) 
    echo $dome_society[$i] . "<br>";
    }

    if(count($tunnel_society) > 0)  
    {
    echo "<h2>Tunnel Society</h2>";
    for ($i = 0; $i < count($tunnel_society); $i++) 
    echo $tunnel_society[$i] . "<br>";
    }

    if(count($friends_circle) > 0)  
    {
    echo "<h2>Friends' Circle</h2>";
    for ($i = 0; $i < count($friends_circle); $i++) 
    echo $friends_circle[$i] . "<br>";
    }

    if(count($others) > 0)  
    {
    echo "<h2>Other Donors</h2>";
    for ($i = 0; $i < count($others); $i++) 
    echo $others[$i] . "<br>";      
    }

?>







<!--dont modify below this line-->
<?php require_once('footer.php') ?>

余談ですが、昨日質問したところ、テーブル名とすべてのテーブル列ヘッダーが表示されたこの素敵な小さなボックスで応答が返されました。質問でそれを行う方法はありますか?それで、もう少しうまく説明して質問をより明確にすることができますか?

みんな、ありがとう、

ジョエル

4

2 に答える 2

2

これはあなたが探していることをするはずです。

mysql> select * from donation;
+------------+--------------+----------------+---------+
| DonationID | DonationType | DonationAmount | DonorID |
+------------+--------------+----------------+---------+
|          1 | monetary     |             50 |       6 |
|          2 | monetary     |            100 |       5 |
|          3 | monetary     |             25 |       5 |
|          4 | monetary     |             75 |       7 |
|          5 | monetary     |            250 |       8 |
|          6 | inkind       |             13 |       1 |
|          7 | inkind       |             19 |      15 |
|          8 | inkind       |              0 |       1 |
|          9 | inkind       |              0 |      23 |
|         10 | inkind       |              0 |       1 |
|         11 | inkind       |           4000 |       3 |
+------------+--------------+----------------+---------+
11 rows in set (0.00 sec)

mysql> select DonorID,sum(DonationAmount) as Total from donation where DonationType='monetary' group by DonorID order by Total Desc;
+---------+-------+
| DonorID | Total |
+---------+-------+
|       8 |   250 |
|       5 |   125 |
|       7 |    75 |
|       6 |    50 |
+---------+-------+
4 rows in set (0.00 sec)

mysql> 

次に、さらに一歩進んで、寄付テーブルを寄付者テーブルと結合し、同じクエリで寄付者名を取得できます。

mysql> select * from donors;
+---------+-------+
| DonorID | Name  |
+---------+-------+
|       6 | bob   |
|       5 | jack  |
|       7 | tim   |
|       8 | jane  |
|       1 | sara  |
|      15 | randy |
|       3 | hamed |
|      23 | jesse |
+---------+-------+
8 rows in set (0.00 sec)


mysql> select donation.DonorID,name,sum(DonationAmount) as Total from donation join donors on donation.DonorID=donors.DonorID where DonationType='monetary' group by DonorID order by Total Desc;
+---------+------+-------+
| DonorID | name | Total |
+---------+------+-------+
|       8 | jane |   250 |
|       5 | jack |   125 |
|       7 | tim  |    75 |
|       6 | bob  |    50 |
+---------+------+-------+
4 rows in set (0.00 sec)
于 2012-11-22T18:27:22.337 に答える
1

私がよく理解している場合、問題は次のとおりです。すべてのユーザーの「現物ではない」寄付を合計して、どのグループに追加する必要があるかを判断します。

その場合、DB モデルには、ドナーを寄付や LGG にリンクするための外部キーが不足しています。

使用できる MCD の例を次に示します。

Donor ((PK)DonorId, Address, Phone, (FK -> LGG) LggId)
Donation((PK)DonationId, (FK -> Donor)DonorId, DonationType, DonationAmount, Description, Date_Received)
LGG ((PK)LggId, LeaderGrp, LGDescrip, MinAmount)

MinAmount は、このグループに属するために必要な最小金額です。

そこから、あなたがしなければならないことは次のとおりです。

select d.donorid, sum(do.donationamount)
from donor d,
donation do
where d.donorid=do.donorid
and do.donationtype!='in-kind'
group by d.donorid

最終的には、すべての寄付者が実際のお金で寄付した金額になります。

于 2012-11-22T17:46:40.290 に答える