首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php / Mysql联合和限制偏移量

Php / Mysql联合和限制偏移量
EN

Stack Overflow用户
提问于 2014-02-04 23:41:53
回答 1查看 5.9K关注 0票数 8

我有3个具有完全相同结构的表,我需要将它们作为一个大表来查询,对这个大表作为一个整体进行排序和限制。当我使用分页时,限制是一个偏移量。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
$from = (($page_number-1)*10);
$to   =  ($page_number)*10;     

$request = mysql_query("
    (SELECT * FROM table_a) 
    UNION ALL 
    (SELECT * FROM table_b) 
    UNION ALL 
    (SELECT * FROM table_c) 
    ORDER BY title ASC 
    LIMIT ".$from.",".$to 
);

$z=0;

while ($result = mysql_fetch_array($request)) 
{
    ....
    $z++;
};

$counter = $z;

我希望$counter等于10,不管页面是什么,但是:

在第1页,$counter = 10

在第2页,$counter = 20

在第3页,$counter = 23

在第4页,$counter =3

好的,如果它不一定等于最后一页的10,因为我从列表中得到了剩下的东西,但是第2页和第3页得到20和23对我没有任何意义。

它必须与限制相关,因为如果我只以一种经典的方式使用单个表,我的计数器总是等于10 (当然,除非它是最后一页)。

这里怎么了?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 23:48:51

限制应该有开始和你想要的行数。所以,如果您想要前十行,那么是0, 10,如果您想要下一个10,则是10, 10 (而不是10, 20,它将给您从第10行开始的20行)。

如果仍然存在问题,请尝试将选择和联合放在它们自己的()集合中。我不确定操作的顺序,可能您的限制只适用于最后一个表。

代码语言:javascript
复制
$request = mysql_query("
    ( 
    (SELECT * FROM table_a) 
    UNION ALL 
    (SELECT * FROM table_b) 
    UNION ALL 
    (SELECT * FROM table_c)
    ) 
    ORDER BY title ASC 
    LIMIT ".$from.",10
);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21565898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档