0

所以,我试图从 2 个表中提取名字、姓氏和捐赠者类型。基本上,一个人有一个主要的“供体类型”。这意味着如果它们是两种不同的捐赠者类型,那么在捐赠者表中,您将放置排名最高的捐赠者。在 DonorandType 表中放置所有剩余的。因此,如果他们是董事会成员、校友和家长,您会在捐赠者表中看到董事会成员,然后在另一张表中看到校友和家长。

我最终让所有的人都出现在捐助者和类型表中(我只放了 4 个人在那里测试每个人都有不同数量的类型)不断出现。但是,如果我选择 2011 年(上一财年),它们不会重复。但是,在 2012 年(本财年),他们做到了。如果您愿意,我可以展示我所有的代码,而不仅仅是关于 sql 语句和 while 循环的部分。但是,我不认为这是我的日期限制的问题。

我的 sql 语句中也有一些日期限制,但我认为这不会有所作为。它基本上只是检查财政年度,如果他们在那一年没有捐款,它不会显示他们。我已经尝试过使用和不使用 SQL 语句的那部分,它似乎没有任何区别。所以,我相信这部分可以忽略。

供体表:

  • 捐助者 ID (PK)
  • 电子邮件
  • 电话
  • 捐助者类型 (FK)

捐助者类型表:

  • DonorTypeID (PK) -- 这是捐赠者类型的 2 个字母缩写,例如:AL 代表 Alumni
  • DonorType -- 这些是每个捐赠者的名字,总共 8 个
  • 等级——基本等级1、2、3等重要

捐助者类型表:

  • 捐助者 ID (FK)
  • 捐助者类型(FK)

捐款表:

  • 捐款编号 (PK)
  • 捐款金额
  • 限制
  • 描述
  • 接收日期
  • 捐助者ID(FK)

好的,所以我想从捐赠者表中提取他们的名字和姓氏。然后从 DonorandType 表中提取他们所有的捐赠者类型。

// SQL query to interact with info from our database
$sql = mysql_query("
    SELECT donor.FirstName, donor.LastName, donorandtype.DonorType
    FROM donor, donortype, donorandtype, donations
    WHERE donor.DonorID = donorandtype.DonorID
      and donortype.DonorType = donorandtype.DonorType
      and donations.Date_Received BETWEEN '" . $startdate . "' and '" . $enddate . "'
") or die (mysql_error()); 

// Establish the output variable
echo "<table border=\"1\" cellpadding=\"10\" >
        <tr>
    <th id='name'>Donor Name</th>
    <th id'dontype'>Donor Type</th>
  </tr>";
while($row = mysql_fetch_array($sql)){ 

    $first_name = $row["FirstName"];
    $last_name = $row["LastName"];
    $donor_type = $row["DonorType"];

    echo "
    <tr>
    <td> $first_name $last_name </td>
    <td>$donor_type </td>
    </tr>";


}
echo '</table>';

这部分实际上显示在一个表格中……这需要说吗?我认为从上面的代码中可以清楚地看到,但无论如何。

DONOR'S TYPES
Donor Name  Donor Type
Henry Hunt  Alumni
Henry Hunt  Board member
Paul Gates  Past Parent
Winifred Gardner    Parent
....
</trim>
4

1 回答 1

1
<?php
// SQL query to interact with info from our database
$sqlTpl = 'SELECT `d`.`FirstName`, `d`.`LastName`, `t`.`DonorType`
           FROM
             `donorandtype` AS `j`
             LEFT JOIN `donor` AS `d` ON ( `j`.`DonorID` = `d`.`DonorID` )
             LEFT JOIN `donortype` AS `t` ON ( `j`.`DonorType` = `t`.`DonorTypeID` )
             LEFT JOIN `donations ` AS `m` ON ( `d`.`DonorID` = `m`.`DonorID` )
           WHERE
             `m`.`Date_Received` BETWEEN "%s" AND "%s"
           ORDER BY
             `d`.`DonorID` , `t`.`Rank`';
$sqlStr = sprintf( $sqlTpl ,
            date( 'Y-m-d h:i:s' , strtotime( $startdate ) ) ,
            date( 'Y-m-d h:i:s' , strtotime( $enddate ) ) );
$sqlRes = mysql_query( $sqlStr );

if( !$sqlRes ){
  echo 'SQL Error Occurred:';
  echo 'But I am not going to show the error messages publicly.';
}else{
?>
<table border="1" cellpadding="0">
  <thead>
    <tr>
      <th id="name">Donor Name</th>
      <th id="type">Donor Type</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <th colspan="2"><?php echo mysql_num_rows( $sqlRes ); ?> Donors Found</th>
    </tr>
  </tfoot>
  <tbody>
<?php
  if( mysql_num_rows( $sqlRes ) ){
    while( $r = mysql_fetch_array( $sqlRes ) ){
?>
    <tr>
      <td><?php echo $r['FirstName'].' '.$r['LastName']; ?></td>
      <td><?php echo $r['DonorType']; ?></td>
    </tr>
<?php
    }
  }else{
?>
    <tr>
      <td colspan="2">No Records Returned</td>
    </tr>
<?php
  }
?>
  </tbody>
</table>
<?php
}
?>
于 2012-12-07T05:20:28.340 回答