2015-09-20 14 views
0

我有一套需要播放的曲目, 數據庫中有70首曲目,我的腳本需要生成一個新的ID才能開始下一首曲目。MySQL Rand()不在子查詢中?

當前查詢:($行[「v_artist」]是當前的藝術家演奏)

SELECT * 
FROM t_tracks 
WHERE v_artist NOT LIKE '%".$row['v_artist']."%' 
ORDER BY RAND() 
LIMIT 1; 

現在我想添加一個子查詢到蘭特(),因此它選擇一個隨機ID,而不是從第50

子查詢(NOT IN):

SELECT * 
FROM `t_playlist` 
ORDER BY pl_last_played DESC 
LIMIT 50, 1 

我怎樣才能從t_tracks隨機ID並不在查詢t_playlist存在嗎?

回答

0

概念,我想你想要這樣的:

SELECT * 
FROM t_tracks 
WHERE v_artist NOT LIKE '%".$row['v_artist']."%' AND 
     track_id NOT IN (SELECT track_id FROM t_playlist ORDER BY pl_last_played DESC LIMIT 50) 
ORDER BY RAND() 
LIMIT 1; 

然而,MySQL的不允許在某些子查詢LIMIT,所以使用LEFT JOIN代替:

SELECT t.* 
FROM t_tracks t LEFT JOIN 
    (SELECT track_id 
     FROM t_playlist 
     ORDER BY pl_last_played DESC 
     LIMIT 50 
    ) p 
    ON t.track_id = p.track_id 
WHERE t.v_artist NOT LIKE '%".$row['v_artist']."%' AND 
     p.track_id IS NULL 
ORDER BY RAND() 
LIMIT 1;