有一个包含5列的表格:id
,data
,category
,time
,page
。
我希望得到id
>行given id
和category
= 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 :(得分: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>';