2013-10-22 58 views
0

有一張5列的表格:id,data,category,time,page。 我想行,其中id>given idcategory = given category,通過page它們分組,得到由time下令每個頁面的第一和遞減的行page列。 (time不是唯一的)更新每個組的第一條記錄

我設法創建此查詢,它的工作原理,但我想知道是否有任何更好的解決方案。 我在選擇合適的問題標題時也遇到了問題,因此如果您認爲問題不是應該如此,請隨時糾正我。

UPDATE `content` AS TABLE1 
    INNER JOIN (SELECT MIN(TABLE2.`id`) AS ID, TABLE2.`page` FROM `content` AS TABLE2 
     INNER JOIN (
      SELECT DISTINCT `page`, MIN(`time`) AS MINTIME 
      FROM `content` 
      WHERE (`page` > (SELECT `page` FROM `content` WHERE `id` = ?) AND `category` = ?) 
      GROUP BY `page`) AS TABLE3 
     ON TABLE2.`page` = TABLE3.`page` AND TABLE2.`time` = TABLE3.MINTIME 
     GROUP BY TABLE2.`page`) AS TABLE4 
    ON TABLE1.`id` = TABLE4.ID 
SET TABLE1.`page` = TABLE1.`page` - 1 

回答

0

這個怎麼樣。您不需要@變量但我不想在SQL中使用問號:

SET @id:= <given id>; 

UPDATE 
    content c1 LEFT JOIN content c2 ON c1.page = c2.page AND 
            c1.category = c2.category AND 
            c2.time < c1.time AND c2.id > @id 
SET c1.page=c1.page-1 
WHERE 
    c1.id > @id AND 
    c2.id IS NULL AND 
    c1.category = '<given category>'; 
相關問題