试图将多表sql查询放入一个结果数组中

时间:2012-07-21 12:59:09

标签: php mysql sql cakephp

我有四个表:关注者,用户,混音,歌曲我试图从一个用户的所有粉丝获得所有混音,我有那个部分想通了,但我也希望得到每个人的歌曲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语句即可完成!提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用SQL join命令一起进行多个查询。

使用此...

sql_join

答案 1 :(得分:0)

首先注意:看起来你的状况不佳。根据上面的查询,歌曲表中的每首歌曲都将与每个可能的结果相结合。可能应该存在类似于以下添加的条件:(根据您的表,列名称可能不同):

...
and mix.song_id=songs.song_id
...

至于你的问题:我不知道php所以我只考虑mysql:我认为不可能用mysql做到这一点。 mysql返回结果集中的行,每行可以在每列中包含单个值。要在一列中添加一组值(歌曲名称),必须将它们连接起来(这是可能的:Can I concatenate multiple MySQL rows into one field?),然后将它们拆分回PHP脚本中。这不是一个好主意,因为您需要选择一个您知道永远不会出现在连接值中的分隔符。因此我认为最好从查询中删除歌曲表,并在获得混音ID后,运行第二个查询以获取该混音中的所有歌曲。