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