Php/Mysql并集和极限偏移量

Php/Mysql并集和极限偏移量,mysql,request,limit,union,counter,Mysql,Request,Limit,Union,Counter,我有3个结构完全相同的表,我需要将它们作为一个大表进行查询,并将这个大表作为一个整体进行排序和限制。 当我使用分页时,限制是一个偏移量 这就是我到目前为止所做的: $from = (($page_number-1)*10); $to = ($page_number)*10; $request = mysql_query(" (SELECT * FROM table_a) UNION ALL (SELECT * FROM table_b) U

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

这就是我到目前为止所做的:

$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(当然,除非是最后一页)

这里怎么了


谢谢

Limit应该有您想要的开始行和行数。因此,如果您想要前10行,请选择
0,10
,如果您想要下10行,请选择
10,10
(不是
10,20
,它将从第10行开始为您提供20行)

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

$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
);

您只是使用了错误的限制…限制并没有将“from row”和“to row”作为参数,而是一个偏移量(即“from row”,ok)和一个行计数–这是您想要的行数。抱歉,我没有理解您的意思。如果我的页面是第4页,我得到的“$from”等于30,“$to”等于40。所以我计算了10行,从第30行开始,到第40行结束。有什么问题吗?所以我必须把10作为“$to”的常数,这是你说的吗?