Php/Mysql联盟和限制偏移量

Bay*_*ock 7 mysql union counter request limit

我有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;
Run Code Online (Sandbox Code Playgroud)

我希望$ counter等于10,无论页面如何,但是:

在第1页,$ counter = 10

在第2页,$ counter = 20

在第3页,$ counter = 23

在第4页,$ counter = 3

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

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

这有什么不对?

谢谢!

Dam*_*ack 5

限制应该具有您想要的开始和行数.所以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
);
Run Code Online (Sandbox Code Playgroud)