1
-- Table structure for table 'members'
CREATE TABLE `members` (
`mID` INTEGER NOT NULL AUTO_INCREMENT, 
`fname` VARCHAR(50), 
`lname` VARCHAR(50), 
`status` VARCHAR(20), 
`dateregistered` VARCHAR(255), 
INDEX (`lname`), 
PRIMARY KEY (`mID`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

-- Table structure for table 'payments'
CREATE TABLE `payments` (
`paymentsID` INTEGER NOT NULL AUTO_INCREMENT, 
`amount` INTEGER, 
`type` VARCHAR(255), 
`officer` VARCHAR(255), 
`dayentered` DATETIME, 
`mID` INTEGER, 
INDEX (`mID`), 
PRIMARY KEY (`paymentsID`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

我的数据库中有上述两个表。该数据库保存根据其账户类型(水电费、建筑项目等)分类的捐赠信息,会员直接向他们选择的特定账户捐款(他们可以向一个账户或所有账户或任意数量的账户捐款) )。

该数据库在 MS Access 中运行良好,但现在我必须将其迁移到 MySQL 和 PHP,这就是我的问题所在。我无法想出代码来列出成员的姓名,并为每个成员显示每个帐户每月捐赠的总金额以及当年的总捐赠额。

请帮助提供代码。谢谢。

4

1 回答 1

0

不像纯 SQL 解决方案那样快速/高效,但这可以完成这项工作。

$query = "
SELECT 
  `members`.`mID`,
  `members`.`fname`, 
  `members`.`lname`, 
  `payments`.`amount`, 
  `payments`.`type`, 
  `payments`.`dayentered`
FROM `members` JOIN `payments` 
ON `members`.`mID` = `payments`.`mID`";
$result = mysqli($link, $query);
$results = array();
while($row=mysqli_fetch_assoc($result)) {

  $mID    = $row['mID'];
  $type   = $row['type'];
  $amount = (int) $row['amount'];
  $date   = $row['dayentered'];
  $year   = date('Y', strtotime($date));

  if(!array_key_exists($mid, $results)) 
    $results[$mid] = array($row['fname'], $row['lname']);

  if(!array_key_exists($date, $results[$mid])) 
    $results[$mid][$date] = array();

  if(!array_key_exists($type, $results[$mid][$date])) 
    $results[$mid][$date][$type] = $amount;
  else
    $results[$mid][$date][$type] += $amount;

  if(!array_key_exists($year, $results[$mid]))
    $results[$mid][$year] = $amount;
  else
    $results[$mid][$year] += $amount;

}
于 2013-06-20T04:10:21.093 回答