0

我有四个表:关注者、用户、混音、歌曲我的查询给了我结果,但是每个结果都是针对混音中的一首歌,而不是针对一个混音的每个结果中的一组歌曲……任何帮助都会令人惊叹,我的 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 语句来完成!提前致谢!

4

2 回答 2

1

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

用这个...

sql_join

于 2012-07-21T13:18:17.800 回答
0

首先注意:看起来您缺少条件。根据上面的查询,songs 表中的每首歌曲都将与所有可能的结果相连接。可能应该添加类似于以下内容的条件:(列名可以根据您的表而有所不同):

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

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

于 2012-07-21T15:46:49.053 回答