【问题标题】:PHP Mysql - create previous and next link from current customerPHP Mysql - 从当前客户创建上一个和下一个链接
【发布时间】:2016-12-02 11:57:46
【问题描述】:

我有一个列出客户的页面:

/customers/

此页面上客户的顺序不连续:

1st: ID 111
2nd: ID 567
3rd: ID 345
etc

这是因为 SQL 查询允许用户根据名字、姓氏或昵称选择客户订单。

"SELECT customer_id FROM customers WHERE status = 1 ORDER BY " . $customer_order

所以当我在上面的示例中是第二个客户时:

/customer/567/

所以我的问题是我想像这样显示上一个和下一个按钮,但不知道如何:

<a href="111">Prev</a>
<a href="567">Current</a>
<a href="345">Next</a>

我设法让上一个链接在一段时间循环中工作,但它很难看。我尝试使用 current()、prev() 和 next() 但失败了。

我在 StackOverflow 上看到的大多数解决方案都与顺序 ID 有关,其中它们要么 -1 要么 1 当前 ID,或者它们在查询中“限制 1”,我很确定在我的情况下不起作用经过测试。

有什么想法吗?

【问题讨论】:

  • 将当前客户的 ID 传递给 next/prev 函数并在 db 中查找下一个。以您的方式,您必须对每条记录进行 3 次查询。以我的方式,如果你点击上一个或下一个按钮,你只需要做一个,最多 2 个

标签: php mysql


【解决方案1】:

您可以为查询分配一个行号,并使用该行号来识别上一条和下一条记录:

SELECT (@row_number := @row_number + 1) AS row_number, customer_id 
FROM customers, (SELECT @row_number := 0) AS rn
WHERE status = 1 
ORDER BY firstname

如果您有当前客户的行号,则使用主查询作为子查询查找下一条/上一条记录:

SELECT customer_id AS next_id
FROM 
(
    SELECT (@row_number := @row_number + 1) AS row_number, customer_id 
    FROM customers, (SELECT @row_number := 0) AS rn
    WHERE status = 1 
    ORDER BY firstname
) ordered_customers
WHERE ordered_customers.row_number = :current_row_number + 1

如果你只有当前的 id:

SELECT customer_id AS next_id
FROM 
(
    SELECT (@row_number := @row_number + 1) AS row_number, customer_id 
    FROM customers, (SELECT @row_number := 0) AS rn
    WHERE status = 1 
    ORDER BY firstname
) ordered_customers
WHERE ordered_customers.row_number = 1 + ( 
    SELECT row_number 
    FROM 
    (
        SELECT (@row_number2 := @row_number2 + 1) AS row_number, customer_id 
        FROM customers, (SELECT @row_number2 := 0) AS rn
        WHERE status = 1 
        ORDER BY firstname
    ) ordered_customers2
    WHERE ordered_customers2.id = :current_id
) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多