如何在分页中获取特定行的页码

Posted

技术标签:

【中文标题】如何在分页中获取特定行的页码【英文标题】:how to get specific rows page number in pagination 【发布时间】:2014-09-18 04:15:48 【问题描述】:

我有一个关于 mysql 分页的问题。一个用户的记录与许多其他用户的记录一起显示在一个表上。并且表格被排序/分页。现在我需要在用户登录后直接显示包含用户行的页面。我怎样才能做到这一点?

create table t_users (id int auto_increment primary key, username varchar(100)); insert t_users(username) values ('jim'),('bob'),('john'),('tim'),('tom'), ('mary'),('elise'),('karl'),('karla'),('bob'), ('jack'),('jacky'),('jon'),('tobias'),('peter');

我搜索了谷歌但没有找到答案,所以请帮忙

【问题讨论】:

您需要稍微澄清一下您的问题。我在这里看到了很多细节,可能与问题无关,并且您的问题标题与描述中的问题不匹配。您是否在问如何在用户登录后查找用户的数据?还是别的什么? 在发布更多代码之前,请先回答我的问题(用普通英语)。我们首先需要清楚地知道问题所在。然后我们可以稍后讨论代码。 我有一个简单的分页脚本,它显示带有“where online>0”子句的站点 所以当用户使用 index.php?u=id 发布其 id 时,我想显示包含他的网站的页面 你可以看到例子u-on.eu/index.php?u=58983在这里点击这个链接我想做的完全一样 【参考方案1】:

这有两个步骤:

1.确定该行在排序表中的位置。

复制并调整自:https://***.com/a/7057822/2391142

使用这个 SQL...

SELECT z.rank FROM (
SELECT id, @rownum := @rownum + 1 AS rank
FROM t_users, (SELECT @rownum := 0) r
ORDER BY id ASC
) as z WHERE id=1;

...用您的实际排序顺序替换ORDER BY id ASC。并将WHERE id=1 中的数字 1 替换为该 index.php?u=id url 中提供的数字。

2。根据行的位置确定页码。

使用这个 PHP 来确定需要的页码...

$rows_per_page = 50;
$user_row_position = [result you got from step 1];
$page = ceil($user_row_position / $rows_per_page);

...用实际的每页行数限制替换 50,并将真正的 SQL 结果放入 $users_row_position。

然后瞧。您将在 $page 变量中获得目标页码,希望您可以从那里获取它。

编辑

在 cmets 中进一步讨论后,使用这点 PHP:

$page = 0;
$limit = 10;

// If a user ID is specified, then lookup the page number it's on.
if (isset($_GET['u'])) 
    // Check the given ID is valid to avoid SQL injection risks.
    if (is_numeric($_GET['u'])) 
        // Lookup the user's position in the list.
        $query = mysqli_fetch_array(mysqli_query($link, "SELECT z.rank FROM (SELECT id, @rownum := @rownum + 1 AS rank FROM sites, (SELECT @rownum := 0) r WHERE online='0') as z WHERE id=" . $_GET['u']));
        $position = $query[0];
        if (is_numeric($position)) 
            // Convert the result to a number before doing math on it.
            $position = (int) $position;
            $page = ceil($position / $limit);
        
    


// If a page number is specified, and wasn't already set by looking a user, then lookup the real starting row.
if ($page == 0 && isset($_GET['page'])) 
    // Check your given page number is valid too.
    if (is_numeric($_GET['page'])) 
        $page = (int) $_GET['page'];
    


// Notice that if anything fails in the above checks, we just pretend it never
// happened and keep using the default page and start number of 0. 

// Determine the starting row based off the page number.
$start = ($page - 1) * $limit;

// Get the list of sites for the provided page only.
$query = mysqli_query($link, "SELECT * FROM sites WHERE online='0' LIMIT " . $start . ", " + $limit);
while ($row = mysqli_fetch_array($query)) 
    // Stuff to render your rows goes here.
    // You can use $row['fieldname'] to extract fields for this row.

【讨论】:

$test=mysqli_query($link," select * from sites where online>0");你能把它转换成你上面的代码吗 为什么没有人回复? 耐心 OP,我们中的一些人实际上是在睡觉。现在,我必须再问一个问题才能为您提供帮助……此“站点”表中用户 ID 的字段名称是什么? 对不起,我是新手,所以很困惑。用户 ID 的字段名称是 'id' $start=0; $限制=10; $id=$_GET['u']; if(isset($_GET['page'])) $page=$_GET['page']; $start=($page-1)*$limit; $query_test=mysqli_query($link," select * from sites where online='0'"); $rows_test=mysqli_num_rows($query_test); $total_test=ceil($rows_test/$limit); $rowr=数组();而($rowr[]=mysqli_fetch_array($query_test)); $total1=$rows_test-1; for($i=0;$i

以上是关于如何在分页中获取特定行的页码的主要内容,如果未能解决你的问题,请参考以下文章

如何在分页中查看第二页

如何使用 Laravel 4 在分页中传递额外的参数?

如何在以下代码中设置条件以在分页中标记当前页面?

如何在 Codeigniter 分页中使用页码而不是偏移量?

在mean.io堆栈中表达js分页

是否有可能从AJAX请求中获取rowCount()以在分页中使用它?