gpt4 book ai didi

php - 如何在mysql中返回数组作为列的值

转载 作者:行者123 更新时间:2023-11-29 02:40:04 25 4
gpt4 key购买 nike

我们是非政府组织组织,每个月都有捐助者,所以我想显示一个表格,显示捐助者的姓名以及所有月份和每个月以下,如果他提供本月的捐款则为真,否则为假.

类似的东西

+-------+-----+-----+-----+-----+-----+
| 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)- 捐助者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 获取第二个表的结果数组,并将其作为文本存储在临时列中,这样

+-------+------------------------+
| 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;

Demo on DB Fiddle


根据您编辑的帖子,您可能希望使用 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;

Demo on DB Fiddle

关于php - 如何在mysql中返回数组作为列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54606188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com