2016-07-28 10 views
0

から、前と次のリンクを作成するSQLいるためだPHP MySQLの私はリストの顧客のページを持っている現在の顧客

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

クエリを使用すると、ユーザーは名、姓、またはニックネームに基づいて顧客の注文を選択できます。

"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> 

私は以前のリンクをwhileループで動作させることができましたが、それは醜いです。私はcurrent()、prev()、next()を使ってみましたが失敗しました。

私がStackOverflowで見たほとんどのソリューションは、現在のIDが-1または1のシーケンシャルID、またはクエリで「LIMIT 1」と表示されています。これをテストした後の状況

アイデア?

+0

は、Cuを渡します顧客のIDを次の/ prev関数に渡して、次のdbを探します。 ところで、レコードごとに3つのクエリを実行する必要があります。あなたが前のまたは次のボタンをクリックすると私のやり方であなたは1つだけをしなければならない –

答えて

0

あなたはあなたのクエリに行番号を割り当て、前回と次のレコードを識別するために、その行番号を使用することができます。

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 
) 
関連する問題