1

请问有人可以帮我扩展这个查询吗?我找不到解决方案。

SELECT *,p.cat_id, cat_name FROM ( SELECT cat_id FROM categories ORDER BY cat_id LIMIT 700000, 10 ) o JOIN categories p ON p.cat_id = o.cat_id ORDER BY p.cat_id

它在有 800 000 条记录的表上非常快,但我需要的是使用 order by 子句和 where claue 对数据进行排序 - 用于分页。如果我使用它的顺序很慢或结果排序不正确>

SELECT *, p.cat_id, cat_name FROM(
    SELECT  cat_id
    FROM    categories
    LIMIT 700000, 10
    ) o JOIN    categories p
ON      p.cat_id = o.cat_id
ORDER BY p.cat_name

page 1
LIMIT 700000,5:
 id      name
 12525525   car
 15155151   carpet
 1521512i   zone

page 2
LIMIT 700005,5
 id        name
12525525   carefull
15155151   excellent
52151222   drive

我需要结果:

page 1 car 
carpet
drive 
excellent ... etc.


f.e. , this is very slow ofcourse >
SELECT *, p.cat_id, cat_name 
FROM    (
        SELECT  cat_id
        FROM    categories
        **ORDER BY cat_name**
        LIMIT 700000, 10
        ) o
JOIN    categories p
ON      p.cat_id = o.cat_id
ORDER BY p.cat_name

主键 cat_id,自动增量我在表中的字段上有索引

非常感谢您的帮助或一些想法

4

1 回答 1

0

您不需要JOIN同一张表,并且您必须在内部查询中使用外部查询中的子句ORDER BY正确排序:WHWRE

 SET @rownum = 0;
 SELECT t.*, t.rank as TableRank
 FROM
 (
    SELECT *,  (@rownum := @rownum + 1) as rank
    FROM categories c 
    ORDER BY c.cat_name
 ) t 
 WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1)
 AND (@PageNum * @PageSize)
于 2012-09-20T14:49:22.230 回答