2014-11-01 88 views
0

我從table recipes中選擇具有相同id的列table likes的列recipe_id和特定的user_id(1)。按子查詢選擇和排序查詢

我想排序/訂單由date從表likes一切,而不是作爲recipes在我的例子...

SELECT DISTINCT name, slugged_url 
FROM recipes 
WHERE id 
IN 
(
    SELECT recipe_id 
    FROM likes t 
    LEFT JOIN users tn ON tn.id = t.user_id 
    WHERE tn.id = '1' 
) 
AND publish = '1' 
ORDER BY date DESC 
LIMIT 0 , 5 

試圖把訂單在子查詢,但沒有奏效。

+0

請張貼所有三個表的模式,以及您的示例輸入是什麼以及您期望的是什麼。 – SMA 2014-11-01 15:35:51

+0

使用'limit'強烈建議MySQL而不是SQL Server。 – 2014-11-01 15:35:55

+0

對不起@戈登林諾夫,我會解決的! – 2014-11-01 15:53:15

回答

0

你應該在外部查詢使用顯式join S和使用的group by代替distinct

SELECT r.name, r.slugged_url 
FROM recipes r JOIN 
    likes l 
    ON r.id = l.recipe_id 
WHERE l.user_id = 1 AND r.publish = 1 
GROUP BY r.name, r.slugged_url 
ORDER BY MAX(l.date) DESC 
LIMIT 0 , 5; 

不需要用戶表,因爲你是比較的id這已經是在likes表。

+0

謝謝你@GordonLinoff!我將您的答案中的「WHERE t.user_id」更改爲「WHERE l.user_id」,它的工作非常完美!再次感謝你! :) – 2014-11-01 15:55:58