データベースに最新のトラックを照会する mysql ステートメントがあります。ただし、データベースは部分的に正規化されているため、ID は異なるテーブルにあります。クエリでは、artists テーブルからアーティスト ID を取得し、それらを変数に入れます。変数は、トラックを調べて最新のトラックを見つけるクエリに解析されます。ここに問題があります。$artist 変数には大量の ID が含まれる可能性があるため、これらの ID はすべてクエリに解析され、クエリに LIMIT を設定したにもかかわらず、結果としていくつかの URL がまとめられます。
テーブルからすべてのアーティストを取得し、すべてのアーティストから最新のトラックを見つける必要があるため、アーティスト クエリを LIMIT できないことに注意してください。
アーティストのクエリを制限せずに、クエリから最新の URL だけを取得するにはどうすればよいですか?
//Set up artist query so only NBS artists are chose
$findartist = mysql_query("SELECT * FROM artists") or die(mysql_error());
while ($artist = mysql_fetch_array($findartist)){
$artist = $artist['ID'];
//get track url
$fetchurl = mysql_query("SELECT * FROM tracks WHERE id = '$artist' ORDER BY timestamp DESC LIMIT 1");
url = mysql_fetch_array($fetchurl);
$track_ID = $url ['ID'];
$trackname = $url ['name'];
$trackurl = $url ['url'];
$artist_ID =$url['ID'];
}
添加:
$findartist = mysql_query("SELECT A.*, T.*
FROM (
SELECT T.ARTIST_ID, MIN(T.TRACK_ID) TRACK_ID
FROM (
SELECT ARTIST_ID, MAX(`TIMESTAMP`) `TIMESTAMP`
FROM TRACKS
GROUP BY ARTIST_ID
) L
JOIN TRACKS T ON ( L.ARTIST_ID = T.ARTIST_ID
AND L.`TIMESTAMP` = T.`TIMESTAMP`)
GROUP BY T.ARTIST_ID
) X
JOIN ARTISTS A ON X.ARTIST_ID = A.ARTIST_ID
JOIN TRACKS T ON (X.TRACK_ID = T.TRACK_ID AND X.ARTIST_ID = T.ARTIST_ID)
ORDER BY A.NAME");
while ($artist = mysql_fetch_array($findartist)){
$artist = $artist['ID'];
$trackurl = $artist['url'];