2010-03-05 58 views
0

我有一個頁面顯示公司名稱及其表A的詳細信息A. 現在說我有一家公司顯示,它的名字是'Company_one'現在我想按字母順序排序下一個公司和以前的公司和他們的詳細信息等。如何按字母順序獲取next和prev記錄的最小取回記錄?

我表中的數據沒有排序,它在獲取數據時存儲。

那麼現在應該寫什麼樣的查詢,它只給出一個前一個和一個下一個按字母順序排序的記錄? Plz help !!

+0

你的桌子上有索引嗎? – Martin 2010-03-05 11:54:38

+0

你我有索引 – developer 2010-03-05 12:08:58

回答

7

有沒有好的辦法做到這一點在一個查詢中。只要做兩個查詢。

要獲得前一個:

SELECT * FROM companies 
WHERE name < variable_with_current_name 
ORDER BY name DESC 
LIMIT 1 

相處的下一個:基於Dominic的答案

SELECT * FROM companies 
WHERE name > variable_with_current_name 
ORDER BY name ASC 
LIMIT 1 
0

您需要使用sort clause對錶格進行排序。原型爲sort是:

sort by fieldname 

實例查詢:

select * from your_table sort by company asc 

如果你想限制記錄,使用limit條款:

select * from your_table sort by company asc limit 0, 1 
0

,您可以使用單個查詢得到同樣的結果通過將它們與結合WHEREOR

例如:

SELECT * FROM `companies` 
WHERE (
    `name` = IFNULL(
     (SELECT `name` FROM `companies` 
      WHERE `name` < 'variable_with_current_name' 
      ORDER BY `name` DESC 
      LIMIT 1) 
     , 0) 
OR 
    `name` = IFNULL(
     (SELECT `name` FROM `companies` 
      WHERE `name` > 'variable_with_current_name' 
      ORDER BY `name` ASC 
      LIMIT 1) 
     , 0) 
) 

希望有所幫助。