这是我经常遇到的问题,我的解决方案总是要运行大量查询,但我觉得必须有更好的方法。以下是此示例的两个表:
艺术家
ID
名称歌曲
ID
artistID
命名
类型
表格如下链接:
artists.id< - > songs.artistID
我想获取所有艺术家的列表,同时获取每位艺术家的所有歌曲列表。我想在结果集中避免重复的艺术家名称,这样我就不必在PHP中清理数据集了。以下是我希望数据格式的示例:
array(0 => array('name' => 'Artist A'
, 'songs' => array(0 => array('name' => 'Song 1'
, 'genre' => 'rock'
)
)
1 => array('name' => 'Song 2'
, 'genre' => 'rock'
)
)
)
1 => array('name' => 'Artist B'
, 'songs' => array(0 => array('name' => 'Song 3'
, 'genre' => 'rap'
)
)
1 => array('name' => 'Song 4'
, 'genre' => 'rap'
)
)
)
)
(我知道这不是MySQL格式,但它是我能解释的最接近的方式)
这可能吗?如果是这样,怎么样?
谢谢!
答案 0 :(得分:1)
我能建议的最好的事情是查询父记录,然后使用in(父id列表)查询查询子项。这将为您提供两个数据集。一个给父母,一个给孩子。在客户端,您可以获取父ID并获取一组子记录。
答案 1 :(得分:1)
选项1:
优点:
没有从数据库传递不必要的信息。
缺点:
可能会运行大量的查询。
选项2:
优点:
只需要一个查询。
缺点:
可能从数据库中传递了大量不必要的数据。
答案 2 :(得分:0)
我担心不可能做你想要的事情,因为SQL本质上是一种基于集合的语言。您可以通过使用表连接在一次调用中获取所有要查找的信息,但之后,您必须解析它们并将它们存储到您提到的结构中。