2017-08-27 42 views
2

保留在CRM客戶數據搜索和排序中,並打開一個數據,如位置編號爲9的數據,ID爲12,現在是客戶,將保存並獲取下一個條目,我會在這裏用我的例子id 6來獲得第一個入口。獲取下一個MYSQL條目,將我的訂單

在過去我提取所有,並做了一個循環搜索我的條目,並獲得下一個,但我認爲theres應該是一個更好的選擇,我的方式是一種糟糕的表現。

感謝

SELECT * FROM testdata WHERE age > 18 ORDER BY age DESC 
Example of DB 
    |id|Name  |age| 
    |9 |perso1 |66 | 
    |10|rergfdgd |55 | 
    |11|gthfghfh |44 | 
    |9 |hghghgh |33 | 
    |1 |kgthht |22 | 
    |2 |ghjgj  |21 | 
    |3 |fhgjg  |20 | 
    |4 |hjhjhjh |19 | 
    |12|ghgjgjg |18 | 
    |6 |tgjhgf |17 | 
    |7 |jhmgmhg |16 | 
    |8 |fghgjgjg |15 | 

回答

1

如果你知道,你發現最後一排的位置是9,第a order,並在選擇可以讀取正確的數據limit組合...

SELECT * 
    FROM testdata 
    WHERE age > 18 
    ORDER BY age DESC 
    LIMIT 9,1 

注意,這有效說 - 忽略前9行並取1行。

更多細節

+0

似乎很有趣,因爲問題是數據可能更少或更多,它是一個crm,所以人們可以在其上工作,但是如果沒有其他公司案例的其他解決方案,我必須循環才能減少數據2個人在同一個競選活動 – StefanBD

+0

也許我應該玩商店下一個和prev entrys直接在我的反應狀態,當我打開數據,所以它易於轉到下一個 – StefanBD

+0

困難的是,如果別人已經在下一個項目工作。聽起來就像你需要一個隊列,你只是不停地獲取下一個條目。新條目被添加到隊列的末尾。 –

1

我同意見https://mariadb.com/kb/en/the-mariadb-library/select/#limit,拉一個完整的結果集,並通過他們循環每次會工作得很好,但也有更優雅的方式來處理這個問題。

這是我的建議。

選項1: 使用布爾字段標記是否已經編輯了記錄。在本例中,edited字段的默認值爲0(false)。編輯完記錄後,將edited標誌更改爲1(真)。然後

你的選擇查詢應該是這樣的:

SELECT * FROM testdata WHERE age > 18 and edited = 0 ORDER BY age DESC limit 1 

然後,在你的PHP代碼,就沒有必要遍歷結果,第一個記錄(且僅記錄如果包括LIMIT 1)在您的查詢中將是下一個尚未編輯的記錄。

選項2:添加一個date_modified字段,其​​默認值爲NULL。編輯記錄時,請將now()保存在date_modified字段中。然後,您的查詢是:

SELECT * FROM testdata WHERE age > 18 and date_modified IS NOT NULL ORDER BY age DESC limit 1 

就像在第一個選項,也沒有必要遍歷結果,第一個記錄(也是唯一的記錄,如果包括LIMIT 1)在您的查詢將是下一個尚未編輯的記錄。

+0

好主意,但不工作,因爲我有更多的用戶 – StefanBD

+0

你的意思是你有多個用戶一次訪問系統?如果是這種情況,那麼這種方法仍然有效。相反,當每個用戶檢索記錄時,在投放到屏幕之前將該記錄標記爲「檢索」。這將防止下一個用戶獲得相同的記錄。此外,我會將查詢包裝在''中,以防止兩個用戶同時獲得相同的記錄 –