3

私はこのクエリに問題があります:

2 つのテーブルがあります: サンプルと選択したい曲

pathName   from samples
id_user    from samples
id         from songs
name       from songs

各サンプルは曲に属しています。最後の日付を選択するために、同じ曲 ID を共有するすべてのサンプルをグループ化したいと思います。だから私はこのように2つのテーブルの間で結合を行います:

$query = 'SELECT 
            samples.pathName path_name,
            samples.id_user id_user,
            songs.id id_song,
            songs.name song_name
        FROM (SELECT *, MAX(date) AS maxDate FROM samples GROUP BY id_song ORDER BY maxDate) samples
        INNER JOIN songs songs
        ON songs.id = samples.id_chanson
        WHERE songs.finished = false';

それほど重くはないはずです。はっきりしているといいのですが... :)

4

2 に答える 2

3

試す:

SELECT sa.pathName,
       sa.id_user,
       so.id id_song,
       so.name song_name
FROM songs so
JOIN (SELECT id_song, MAX(`date`) AS maxDate FROM samples GROUP BY id_song) mx
  ON so.id = mx.id_song
JOIN samples sa 
  on mx.id_song = sa.id_song and mx.maxDate = sa.`date`
WHERE so.finished = 'false'
ORDER BY mx.maxDate
于 2013-06-08T09:01:46.073 に答える
0

私は次のようなものを使用します:

SELECT
  samples.pathName path_name,
  samples.id_user id_user,
  songs.id id_song,
  songs.name song_name
FROM
  samples INNER JOIN songs ON songs.id = samples.id_song
WHERE
  songs.finished = false
  AND (samples.id_song, samples.`date`) IN (SELECT   id_song, MAX(`date`)
                                            FROM     samples
                                            GROUP BY id_song)
于 2013-06-08T10:11:37.183 に答える