0

次のクエリがあります。

SELECT TrackID, Name, Artist, Album, TotalTime, TrackNumber, TrackCount
FROM tracks
WHERE TrackID IN (SELECT Tracks FROM playlists
                  WHERE ID='f8ad830c-e2d6-11e1-99d7-00132094'
                  LIMIT 1)
ORDER BY Artist, Album, TrackNumber

「tracks」テーブルから最初の行を返し、サブクエリから返された結果のいずれかを含むように実行します。現在、サブクエリは次を返します。

41646,41696,41698,41700,41702,41704,41706,41708,41710,41712

サブクエリから返された上記の値を元のクエリに入れると、サブクエリの代わりに、期待するすべての行が返されます。

サブクエリが返される結果を最初の結果に制限するのに、(PHPMyAdmin で実行された場合に) サブクエリを返される結果に置き換えると、それらすべてが返されるのはなぜですか?

4

2 に答える 2

2
SELECT TrackID, Name, Artist, Album, TotalTime, TrackNumber, TrackCount 
  FROM tracks 
 WHERE FIND_IN_SET(TrackID
                  , (SELECT Tracks
                       FROM playlists 
                      WHERE ID='f8ad830c-e2d6-11e1-99d7-00132094' 
                      LIMIT 1
                    )
                  ) > 0
 ORDER BY Artist, Album, TrackNumber 
;
于 2012-10-14T00:40:43.943 に答える
1

limit 1あなたはサブクエリで言います。そのため、トラック ID は 1 つしか得られないため、トラックは 1 つしかありません。

トラックを複数の行に分割して、1 つのプレイリストにトラックと同じ数の行を含めるか、トラック文字列を一時テーブルに分割することができます。MySQLを見てください: たとえば、カンマ区切りのリストを複数の行に分割するか、「文字列を行に分割」を検索します。

于 2012-10-13T22:08:30.540 に答える