我有四个表:关注者,用户,混音,歌曲我试图从一个用户的所有粉丝获得所有混音,我有那个部分想通了,但我也希望得到每个人的歌曲mixes,目前我的查询给了我结果,但每个结果都是混合中的一首歌,而不是每个结果中的一系列歌曲混合...任何帮助都会很棒,我的sql技能不是最好的我花了很多时间试图解决这个问题!
我当前的查询是:
SELECT followers.following_id, users.id, users.user_username, mixes.id, mixes.mix_created_date, mixes.mix_name,songs.song_artist
FROM followers, users, mixes,songs
WHERE followers.user_id = 46
AND users.id = followers.following_id
AND mixes.user_id = followers.following_id
AND mixes.id > 0
ORDER BY mixes.mix_created_date DESC
LIMIT 10
当前结果是(通过cakephp自定义查询运行)
Array
(
[0] => Array
(
[followers] => Array
(
[following_id] => 47
)
[users] => Array
(
[id] => 47
[user_username] => someguy
)
[mixes] => Array
(
[id] => 45
[mix_created_date] => 2012-07-21 2:42:17
[mix_name] => this is a test
)
[songs] => Array
(
[song_artist] => Yo La Tengo
)
)
[1] => Array
(
[followers] => Array
(
[following_id] => 47
)
[users] => Array
(
[id] => 47
[user_username] => someguy
)
[mixes] => Array
(
[id] => 45
[mix_created_date] => 2012-07-21 2:42:17
[mix_name] => this is a test
)
[songs] => Array
(
[song_artist] => Animal Collective
)
)
你可以看到混音id是一样的,我试图让歌曲成为每个结果中的一个数组,如:
Array
(
[0] => Array
(
[followers] => Array
(
[following_id] => 47
)
[users] => Array
(
[id] => 47
[user_username] => someguy
)
[mixes] => Array
(
[id] => 45
[mix_created_date] => 2012-07-21 2:42:17
[mix_name] => this is a test
)
[songs] => Array
(
[0]=>array(
['song_artist'] => Yo La Tengo
),
[1]=>array(
['song_artist'] => Animal Collective
)
)
)
真的希望只用一个sql语句即可完成!提前谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
首先注意:看起来你的状况不佳。根据上面的查询,歌曲表中的每首歌曲都将与每个可能的结果相结合。可能应该存在类似于以下添加的条件:(根据您的表,列名称可能不同):
...
and mix.song_id=songs.song_id
...
至于你的问题:我不知道php所以我只考虑mysql:我认为不可能用mysql做到这一点。 mysql返回结果集中的行,每行可以在每列中包含单个值。要在一列中添加一组值(歌曲名称),必须将它们连接起来(这是可能的:Can I concatenate multiple MySQL rows into one field?),然后将它们拆分回PHP脚本中。这不是一个好主意,因为您需要选择一个您知道永远不会出现在连接值中的分隔符。因此我认为最好从查询中删除歌曲表,并在获得混音ID后,运行第二个查询以获取该混音中的所有歌曲。