2016-02-18 22 views
0

我有這個疑問,將由用戶返回我的收藏音頻的ID,通過日期排序時,他們標誌着ID爲收藏:無序結果

SELECT audio_id FROM favorites 
WHERE user_id = ? 
ORDER BY `time` DESC 

現在,我嘗試顯示在屏幕上的音頻,還下令按日期

SELECT * FROM audios 
WHERE id IN (
    SELECT audio_id FROM favorites 
    WHERE user_id = ? 
    ORDER BY `time` DESC 
    ) 
AND status = '1' 

但該查詢後,他們沒有按照時間先後。第二個查詢中ID的順序與第一個ID中的ID順序不同。

我該怎麼辦?我不想存儲結果,然後重新排序

回答

2

未按時間排序的原因是因爲您的ORDER BY位於內部SELECT聲明中。因此它並不適用於外SELECT

這應該爲你工作:

SELECT DISTINCT A.* 
FROM audios AS A INNER JOIN 
     favorites AS F ON A.id = F.audio_id AND F.user_id = ? AND A.status = '1' 
ORDER BY F.[time] DESC 
+0

真棒!完美的作品。我從來沒有學會使用JOIN。總是覺得這太難以爲我學習了哈哈 – Zerquix18

+0

@ Zerquix18很好聽的人。這應該有助於理解聯接http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ –

+0

@ Zerquix18如果答案奏效,請將其標記爲已回答謝謝:) –

1

WHERE子句中的查詢中的ORDER BY沒有在SELECT聲明對數據的影響。使查詢成爲聯接,允許將數據存儲在當前位置,並且仍然可以相應地進行排序。

SELECT A.*, 
     f.[time] 
FROM audios A INNER JOIN favorites f 
     ON A.audio_id = f.audio_id 
WHERE a.status = '1' and 
     f.user_id = ? 
ORDER BY [time] DESC 
0

你應該把你的ORDER BY條款出來的子查詢,就像:

select t1.* from audio t1 
inner join favorite t2 
    on t1.audio_id = t2.audio_id 
order by t2.dt_date desc; 

請嘗試對這個小提琴:http://sqlfiddle.com/#!9/ca05bf