php - 如何在mysql中将数组作为列的值返回
问题描述
我们是 NGO 组织,我们有每个月都捐赠的捐赠者,所以我想显示一个表格,显示捐赠者的姓名以及所有月份和每个月的下方,如果他捐赠了本月的捐赠,则设置为 true,否则设置为 false。
类似的东西
+-------+-----+-----+-----+-----+-----+
| Donor | Jan | Feb | Mar | Apr | May |
+-------+-----+-----+-----+-----+-----+
| A | 1 | 1 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 1 | 1 |
| C | 1 | 0 | 0 | 1 | 1 |
| D | 1 | 1 | 0 | 1 | 0 |
+-------+-----+-----+-----+-----+-----+
现在我在 mysql 数据库中创建 2 个表:1)- Donors 2)- Donation_Months
捐助者:
+-----+------+
| id | name |
+-----+------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
+-----+----- +
Donation_Months :
+-------+-------+-------+
| dm_id | do_id | month |
+-------+-------+-------+
| 1 | 2 | Jan |
| 2 | 2 | Feb |
| 3 | 2 | Mar |
| 4 | 2 | Apr |
+-------+-------+-------+
此表显示第二个捐赠者(B)在这 4 个月内向我们提供了他的捐赠
现在我想创建一个 sql 语句,将Donors 表与Donation_Months 表关联起来,并像上表一样显示结果。
这里的重点是我想为每个捐赠者获取很多行,但我想在一个循环或一行中显示它们
我怎样才能做到这一点 ??我尝试了很多方法,但没有那样的意义
SELECT accounts.*, (SELECT * FROM donation_months where donation_months.domo_account_id = accounts.account_id) AS months FROM `accounts`
账户=捐助者
我想做的想法是,我想根据捐助者 id 获取第二个表的结果数组,并将其作为文本存储在 temp 列中
+-------+------------------------+
| Donor | temp_months |
+-------+------------------------+
| A | () |
| B | (Jan, Feb, Mar, Apr) |
| C | () |
| D | () |
+-------+------------------------+
提前致谢
解决方案
一种解决方案可能是我们的条件聚合:
SELECT
d.name,
COALESCE(MAX(m.month = 'Jan'), 0) Jan,
COALESCE(MAX(m.month = 'Fev'), 0) Fev,
COALESCE(MAX(m.month = 'Mar'), 0) Mar,
COALESCE(MAX(m.month = 'Apr'), 0) Apr,
COALESCE(MAX(m.month = 'May'), 0) May
FROM
donors d
CROSS JOIN (SELECT DISTINCT month FROM Donation_Months) x
LEFT JOIN Donation_Months m ON m.do_id = d.id
GROUP BY d.name;
根据您编辑的帖子,您可能希望GROUP_CONCAT
在单个列中显示所有月份,例如:
SELECT
d.name,
GROUP_CONCAT(DISTINCT m.month ORDER BY m.dm_id) temp_months
FROM
donors d
CROSS JOIN (SELECT DISTINCT month FROM Donation_Months) x
LEFT JOIN Donation_Months m ON m.do_id = d.id
GROUP BY d.name;
推荐阅读
- laravel - Laravel Sanctum SPA 验证 - 成功登录后未验证
- c# - 在多线程应用程序中创建文件时出现异常 - “文件正在被另一个进程使用”
- r - 如何解决指出 sce 不是数字的 addPerCellQC 错误?
- batch-file - 有没有办法同时运行这两个批处理脚本?在同一个文件上,合并
- java - java中是否有任何公共/全局变量?
- pandas - 如何在熊猫数据框中交换行和列
- javascript - 从钩子问题中为每个元素调用的函数
- git - git push 命令与 master 和 main 冲突
- sql - SQL查询以选择具有改变粒度的记录
- python - Python YYYY-MM-DD hh:mm:ss.fff-zz:xx 格式化日期时间问题