我是一名当地非营利组织的志愿者,在节日期间赠送玩具和食物。我帮助他们的一种方式是在网上提出他们的礼物/食物要求。这样,您可以在15个小时内手动将1000个左右的名称手动输入到Excel中,只需单击一个链接即可在几秒钟内导出整个内容。
我的问题与如何在一个查询中从数据库中获取数据有关。我相信它是可能的,但不能完全包围我能做到的。
有一个父表,其中包含将收到礼物的孩子的家庭信息(每个家庭1行)。有一个子表包含家庭的孩子的信息(每个孩子1行,每个父行有很多行)。每个父行将有1-3个子行。
PARENT TABLE
-----------------------------
id
name
address
city
CHILDREN TABLE
-----------------------------
parent_id
name
gift1
gift2
gift3
我希望在从数据库导出数据时将所有孩子的信息与父母的信息一起获取,以便将其放入CSV文件中。我知道我可以通过两个单独的查询来执行此操作,但如果可能的话,我不想为每个家庭的孩子访问数据库。
我已经思考了一个小时左右,并且无法想出我将如何实现这一目标。我确定我需要加入这些表格,但我不确定如何区分每个孩子并避免重复他们而不是让下一个孩子(如果有的话)。
答案 0 :(得分:5)
由于每个父母的子女数量可变,因此在SQL
中唯一可以完成的方式是在一条记录中分隔所有礼品分号:
SELECT p.*, GROUP_CONCAT(c.name, ': ', c.gift1, ', ', c.gift2, ', ', c.gift3 SEPARATOR ';')
FROM parents p
JOIN children с
ON c.parent_id = p.id
GROUP BY
p.id
这会给你这样的东西:
parent children_and_gifst
Mr. Jones Alice: teddy bear, candy, drum; Bob: pup, sword, flute
,所有孩子和他们的礼物在一栏中。