Php MySQL,SubSelect,这可能吗?
所以,我有一张捐款表。它存储一个$value和一个列框,供他们选择货币或实物捐赠。实物捐赠可以有美元,但通常没有。实物捐赠是指有人捐赠实物,如割草机、桌子、椅子等。然后我有了捐赠者。最后,我有一个领导小组。根据一定数量,捐赠者被投入到一个捐赠领导小组中。因此,100美元的捐赠者被放入另一个捐赠者组,1000美元的捐赠者被放入下一个捐赠者组,依此类推。我需要合计所有捐赠,但不包括所有实物捐赠,因为这些捐赠(即使它们有货币价值)不算作将捐赠者放入领导小组的位置 表:我无法执行SHOW CREATE,因为它有一个我无法控制的服务器值需要更改。我希望这对每个人都是好的。我只想显示3个表及其所有当前字段。对不起,我失约了 好的,对于表,我记不住所有的语法,但是应该很容易看到外键和主键,所有的字段都在那里。我只是有点匆忙,因为今天是感恩节,我的家人因为我在电脑上而生我的气Php MySQL,SubSelect,这可能吗?,php,mysql,Php,Mysql,所以,我有一张捐款表。它存储一个$value和一个列框,供他们选择货币或实物捐赠。实物捐赠可以有美元,但通常没有。实物捐赠是指有人捐赠实物,如割草机、桌子、椅子等。然后我有了捐赠者。最后,我有一个领导小组。根据一定数量,捐赠者被投入到一个捐赠领导小组中。因此,100美元的捐赠者被放入另一个捐赠者组,1000美元的捐赠者被放入下一个捐赠者组,依此类推。我需要合计所有捐赠,但不包括所有实物捐赠,因为这些捐赠(即使它们有货币价值)不算作将捐赠者放入领导小组的位置 表:我无法执行SHOW CREATE,
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), );
限制是他们通过下拉框选择的两个条目之一。限制(然后它是由捐赠者指定用于特定项目或非限制性的,这意味着捐赠者不关心资金的使用方式。捐赠类型的工作方式相同,但它是实物或货币。我只想计算货币价值的总和
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,
领导小组表:我吃完后会加上,对不起,我的家人要杀了我
LeaderGrip不是AI,它是每个Leaderhip组的名称:其他捐赠者、创始人俱乐部、朋友圈等等。这将永远是独一无二的,所以我将其作为PK,但如果出于某种原因和AI领域,我可以这样做
我可以发布我的代码,如果这会使它更容易,但我觉得它会变成一个巨大的文本墙的人。然而,这是一个网站和其他编程语言,我在这个项目中使用的是js和php,因此,如果它可以在php中,这是一个选项。我也可以给你的网站链接,让你查看信息,因为目前所有的数据都是虚构的,如果有帮助的话,很明显真实的数据是无法共享的。只需索取它,因为我并不真的想发布它,而有些人可能只是进入并开始向我的表中添加数据
代码:
如果我理解的很好,问题是:将每个用户的所有“非实物”捐赠相加,以确定他们应该加入哪一组
如果是这样,您的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
你最终会得到每一位捐赠者捐赠的真金白银。这应该满足你的需求
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)
代码示例只需要缩进四个空格。您可以突出显示希望以这种方式格式化的文本,然后使用Ctrl-K,它将为您缩进。或者单击{}
格式栏上的符号。同样,在请求SQL帮助时,比包含PHP代码更有用的是包含表定义。例如,您可以在MySQL客户端中使用SHOW CREATE table provider
,并将其复制粘贴到您编辑的问题中。好的,因此我认为我无法使用它显示表命令,因为我不控制服务器,它看起来好像您必须更改服务器值以显示正确的列数,默认情况下,它将只显示1,这就是我遇到的。我将只写出mysql,就像我第一次创建表一样,并使用{}来显示它。希望没问题。对不起,DonorID在捐赠表中,我只是忘了放它,因为我很笨。^^。我将尝试用比尔建议的所有表结构更新我的帖子。我还添加了我已经有的php文件。对所有的错误表示抱歉。在这个网站上发布非常新,我从这里得到了很多答案,但我不是通常不是问问题的人。我很确定我可以将你的陈述融入到我目前拥有的东西中,而且应该会起作用。fam的东西终于完成了。现在我有机会测试了。谢谢大家的帮助。
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)