0

フォロワー、ユーザー、ミックス、曲の 4 つのテーブルがあります。現在、1 人のユーザーのすべてのフォロワーからすべてのミックスを取得しようとしています。私のクエリは私に結果を与えていますが、各結果は、1つのミックスの各結果内の曲の配列ではなく、ミックスの1つの曲に対するものです...どんな助けも素晴らしいでしょう、私の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
                )
            )

    )

これがたった1つの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 は結果セットに行を返し、各行には各列に単一の値を含めることができます。値 (曲名) のグループを 1 つの列に追加するには、それらを連結する必要があります (それは可能です:複数の MySQL 行を 1 つのフィールドに連結できますか? )。後で、php スクリプトでそれらを分割して戻します。連結される値に決して現れないことがわかっている区切り記号を選択する必要があるため、これは良い考えではありません。したがって、クエリから曲テーブルを削除し、ミックス ID を取得した後、2 番目のクエリを実行してそのミックス内のすべての曲を取得する方がよいと思います。

于 2012-07-21T15:46:49.053 に答える