2016-06-17 12 views
-1

最近更新されたページを追跡するテーブルがあり、各ページにタイプがあります。私は、タイプ3のページを3つだけ引き出し、タイプ3の3ページだけを引き出すように結果を制限したいが、それでもlastUpdatedによってソートされている。私はUNIONを使用しているMySQL - 2つのクエリを結合するか結果を制限する

ORDER BY lastUpdated DESC 

答えて

2

1つの明らかな方法は、それを行うには... mysqlのその後

SELECT * from recentlyUpdated WHERE type = 'x' DESC LIMIT 3 
SELECT * from recentlyUpdated WHERE type = 'y' DESC LIMIT 3 

でこれを行う方法を見つけ出すことはできません。

SELECT * 
FROM (
    SELECT * 
    FROM recentlyUpdated 
    WHERE type = 'x' 
    LIMIT 3 

    UNION ALL 

    SELECT * 
    FROM recentlyUpdated 
    WHERE type = 'y' 
    LIMIT 3) AS t 
ORDER BY lastUpdated DESC 

を別の方法として、あなたを変数を使用できます。

SELECT * 
    FROM (
    SELECT *, 
      @seq := IF(@t = type, @seq + 1, 
         IF(@t := type, 1, 1)) AS seq 
    FROM recentlyUpdated 
    CROSS JOIN (SELECT @seq := 0, @t := '') AS vars 
    WHERE type IN ('x', 'y') 
    ORDER BY type) AS t 
    WHERE t.seq <= 3 
    ORDER BY lastUpdated DESC 
4

これはあなたを助けるかもしれません;)

(SELECT * from recentlyUpdated WHERE type = 'x'lastUpdated ORDER BY DESC LIMIT 3) 
UNION ALL 
(SELECT * from recentlyUpdated WHERE type = 'y'lastUpdated ORDER BY DESC LIMIT 3) 
ORDER BY lastUpdated DESC 
+0

私はそれを理解できませんでした。ありがとうございました!いつか組合は私をそんなに混乱させません。 – Andelas

関連する問題