2011-02-07 47 views
0

我帶來了這個question up previously,但我收到的答案只在某些情況下有效,但對於其中大多數情況並不適用。PHP SQL在查詢中獲取下一行(用戶訂購結果)

我有一個顯示產品列表的頁面。我有5000多種產品,並且他們顯示的頁面具有排序和搜索功能。用戶可以按升序或降序排列5-6列中的任何一列。他們可以通過具有許多重複值的「強度」列進行排序。即使'名稱'列也有重複的值。

由於這些排序控件,我可以得到ID爲5,2,8,4等的結果。我將查詢變量保存在一個會話中,因此,如果我編輯產品5,保存後會將其帶到產品2,保存後會將其保存到8和4中。我需要查詢以獲取當前項目ID之後的下一行。

我使用的測試得到的結果的查詢是:

SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 0,10 

我已經進入這兩個搜索值和我只是按名稱排序。我怎樣才能得到下一行等等?

回答

1

我決定通過URL中結果表中的位置。我通過檢索頁碼,將其乘以每頁結果的數量,然後向其中添加遞增變量來獲得此信息。這樣,上一個/下一個鏈接可以接受查詢位置並從中加/減1。結合LIMIT聲明,這似乎是有效的。這是令人討厭的,必須通過URL中的變量,但至少它的工作原理。

0

我會這樣做的數據庫。在會話中保存一些查詢ID的順序?然後,您可以輕鬆瀏覽它們。如果用戶採用該設置,或者超出了存儲數據集的限制,則重新發出完整查詢並保存一組新結果。

0

下面的查詢將返回第二個結果

SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 1,1 

下面的查詢將返回第三個結果

SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 2,1 

等等...

或者你可以做一個臨時的表。臨時表與數據庫連接會話綁定。

CREATE TEMPORARY TABLE list ... 
+0

此解決方案根本不起作用,因爲我有物品ID,而不是返回的查詢中的位置 –