0

これにより、MySQL に「二重検索」を実行させることができるかどうか疑問に思っていました。うまく表現できないので、以下に例を示します。

曲情報の表(タイトル、アルバムなど...)があります。アルバムの次の曲を手に入れたいです。現在の曲のIDを持っています。現在、行を取得し、アルバムとトラック フィールドを確認してから、アルバム フィールドに基づいて別の MySQL クエリを実行し、現在のトラックの後に別のトラックがあるかどうかを確認します。

1 つのクエリで、アルバムのすべての行が自分の ID の行に含まれるように MySQL に指示できますか?

これが可能かどうか、またはそれを説明する方法が本当にわからないため、Stack Overflow で役立つものは何も見つかりませんでした。類似したものが既にある場合は申し訳ありません。

4

3 に答える 3

5

JOIN を使用して、必要なものを取得できます。テーブルにアルバムにリンクする ID があると仮定すると、このようなものは、現在聴いているトラックの後に続くすべてを取得するために機能します。

select *
  from songs a
  join songs b
    on a.album_id = b.album_id
 where a.song_id = 1 
   and b.song_id > a.song_id

明らかに、アルバム内のすべてが必要な場合は、2 番目の条件を削除してください。聴いているトラックを含めたい場合は に変更>して>=ください。


コメントしました:

私はそれについて言及すべきでしたが、IDはトラックの順序とは関係ありません。それはテーブルの主キーです。

もしそうなら、それb.song_id > a.song_idはおそらく間違っています。完全なスキーマは提供されていませんが、songsテーブルにトラックの再生順序が含まれている場合は、次のようになることを強くお勧めします(SONG_ID, ALBUM_ID, ALBUM_ORDER, ... more song level info )。クエリは次のようになります。

select *
  from songs a
  join songs b
    on a.album_id = b.album_id
 where a.song_id = 1 
   and b.album_order > a.album_order
于 2012-12-23T10:04:36.303 に答える
2

サブクエリが必要なようです

SELECT * FROM song_table WHERE album = 
    (SELECT album FROM song_table WHERE id = 12)

このクエリは、同じアルバムを共有するすべての行を取得します。id = 12

サブクエリが複数の行を返す可能性がある場合は、次のものが必要ですIN

SELECT * FROM song_table WHERE album IN 
    (SELECT album FROM song_table WHERE genre = "Techno")

このクエリは、(アルバム) を含むアルバムgenre = "Techno"((少なくとも 1 つの) テクノ ソングを含むアルバムのすべての曲) を含むすべての行を取得します。

于 2012-12-23T10:03:17.160 に答える
0

現在、行を取得し、アルバムとトラック フィールドを確認してから、アルバム フィールドに基づいて別の MySQL クエリを実行し、現在のトラックの後に別のトラックがあるかどうかを確認します。

それの何が問題なのですか?遅い、不便、または複雑すぎませんか?
別の解決策を探す実用的な理由はありますか?

これがMySQLに「二重検索」をさせることが可能かどうか疑問に思っていました

肯定的な答えがあったとしても、「可能な」すべてが実装に値するわけではありません。

現在のセットアップは単純明快で、自分で維持できます。
提案されたすべてのソリューションは複雑ですが、Mysql は複雑なクエリを解釈するのが難しく、状況を悪化させやすいため、維持するにはより多くの知識が必要であり、いくつかの問題につながる可能性があります。

于 2012-12-23T10:31:55.250 に答える