0

私は初心者の SQL プログラマーなので、クエリを抽出するために少し助けが必要です。

毎週テーブルからユニークな曲を再生する必要があります。

ある週に 8 つの異なる曲が再生されたとしますが、それらの 8 曲はそれぞれ何度も再生されています。8 曲を表示したいだけです。

STATS テーブルと PLAYLIST テーブルの 2 つのテーブルを結合してこれを行う必要があります

SELECT playlist.p_title AS title, stats.s_week AS week, playlist.p_artist AS artist, p_id
FROM stats, playlist
WHERE stats.s_pid = playlist.p_id
AND s_uid =31
ORDER BY s_week DESC
LIMIT 0 , 30 

これは、毎週何回も再生されたとしても、すべての週に再生されたすべての曲を提供する私の元のクエリです。これは私が望んでいないことです。

週ごとに曲を区別するのを手伝ってくれる人はいますか?

前もって感謝します - ラスムス

4

3 に答える 3

1

DISTINCT 句を使用するだけです。

SELECT DISTINCT
  playlist.p_title AS title,
  stats.s_week AS week,
  playlist.p_artist AS artist, p_id
FROM stats inner join playlist on stats.s_pid = playlist.p_pid
WHERE s_uid =31
ORDER BY s_week DESC
LIMIT 0 , 30

また、table1 inner join table2 on table1.id = table2.idWHERE 句を使用して 2 つのテーブルを結合する代わりに、a を使用することをお勧めします。

于 2012-11-19T10:57:02.113 に答える
1

あなたがこれをしたいので、for each weekあなたは見ることをお勧めしますGROUP BY...

JOINまた、構文の使用に関するチュートリアルを探すことをお勧めします(これは 1992 年から存在しており、一般的に使用する標準と見なされています。,また、さまざまな RDBMS で使用が推奨されていないこともよくあります)。

SELECT
  stats.s_week        AS week,
  stats.p_id          AS pid,
  playlist.p_title    AS title,
  playlist.p_artist   AS artist,
  COUNT(*)            AS plays     /* This shows how many times a track was played */
FROM
  stats
INNER JOIN
  playlist
    ON stats.s_pid = playlist.p_id
WHERE
  s_uid =31
GROUP BY
  stats.s_week,
  stats.p_id,
  playlist.p_title,
  playlist.p_artist
ORDER BY
  stats.s_week DESC
LIMIT
  0 , 30 

特定のフィールドにテーブル名が含まれていない場合は、それらも追加しました。

フィールドがどこから来たのかを明示することは常に良いことです。やGROUP BYその他の用途では、多くの場合必須です

于 2012-11-19T10:59:53.427 に答える
0
SELECT playlist.p_title AS title, stats.s_week AS week, playlist.p_artist AS artist, p_id
FROM stats, playlist
WHERE stats.s_pid = playlist.p_id
AND s_uid =31
group by playlist.p_title, stats.s_week,playlist.p_artist
ORDER BY s_week DESC
LIMIT 0 , 30 
于 2012-11-19T10:56:53.603 に答える