1

私は2つのテーブル、歌と歴史を持っています。曲の表は次のようになります。

ID | title      | artist      | duration
1  | some title | some artist | 83592

履歴テーブルは次のようになります。

ID | title      |   artist    | duration | date_played
5  | some title | some artist | 83592    | 2012-08-08 11:22:00

履歴テーブルの最新のエントリのタイトルとアーティストが一致する場合、曲テーブルのIDをエコーするにはどうすればよいですか?

試しSELECT * FROM history JOIN songs ON title=songs.title AND artist=songs.artist ORDER BY date_played DESC LIMIT 0, 1ましたが、うまくいきませんでした。何か案は?

4

5 に答える 5

3
SELECT s.ID
FROM songs s
INNER JOIN (SELECT * FROM history h ORDER BY date_played DESC LIMIT 1) lastHistory
ON lastHistory.title = s.title AND lastHistory.artist = s.artist

Sqlfiddle

于 2012-08-14T16:58:28.040 に答える
2
SELECT * FROM history A INNER JOIN songs B 
ON A.title=B.title AND A.artist=B.artist 
ORDER BY A.date_played DESC

私の提案は、履歴テーブルで、アーティストとタイトルの代わりに曲テーブルの曲IDを使用できることです。

表:歌

ID | title      | artist      | duration
1  | some title | some artist | 83592

表:履歴

ID | songid  | date_played
5  | 1       | 2012-08-08 11:22:00

スキーマに最適化をもたらすことができるようにします。

次に、このクエリを試すことができます。

SELECT * FROM history A INNER JOIN songs B 
ON A.songid=B.ID ORDER BY A.date_played DESC
于 2012-08-14T17:10:03.833 に答える
1
SELECT songs.* 
FROM songs, (SELECT * FROM history ORDER BY DESC date_played LIMIT 1) hist_view
WHERE songs.title = hist_view.title 
    AND songs.artist = hist_view.artist

上記のクエリは、hist_viewと呼ばれる最近再生された曲のインラインビューを作成します(LIMITおよびORDER BY DESCを使用)。次に、曲テーブルと結合して、アーティストとタイトルに基づいて一致する曲を見つけます。

履歴テーブルに外部キーとしてsong_idのようなものを追加することをお勧めします。

于 2012-08-14T17:08:48.743 に答える
1

使用できます

SELECT   songs.id
FROM     songs,
         history
WHERE    songs.title = history.title
AND      songs.artist = history.artist
ORDER BY history.date_played DESC

また

SELECT     songs.id
FROM       songs
INNER JOIN history ON  history.title = songs.title
                   AND history.artist = songs.artist
ORDER BY   history.date_played DESC

しかし、Vinayによって提案されたようにテーブルを整理した方がよいでしょう。

于 2012-08-14T19:03:25.600 に答える
0

これをチェックして

select songs1.id,history1.title,history1.artist 
from songs as songs1,history as history1
order by date_diplayed desc

私はこのクエリがあなたの問題を解決すること

于 2012-08-14T16:57:14.733 に答える