Php / Mysql联盟和限制偏移量

时间:2014-02-04 23:41:54

标签: 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) 
    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对我没有任何意义。

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

这里有什么问题?

谢谢!

1 个答案:

答案 0 :(得分: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
);