2016-04-02 38 views
-2

veritabanından en son ve ikinci en son kayıt almak için herhangi bir yolu var mı? çünkü her sorguyu kaydırıcı görsel/içerik için kullanmak istiyorum. lütfen sorumun kafa karıştırıcı olup olmadığını söyle.en son, ikinci en son ve üçüncü en son kayıt almak için

order by desc id veya date, limit 3'u kullanmanın bir yolu olduğunu biliyorum, ancak bu sadece bir sorguda geliyor, en yeni ve en son kayda ikinci ve üçüncü kayıtları almanın bir yolu olup olmadığını merak ediyordum. En son sorgunun order by desc id veya date, limit 1 gibi yazılabildiğini biliyorum, sadece 2. ve 3. son kayıtla nasıl sorgulanacağını bilmiyorum.

+0

Bu yüzden benim cevabım işe yaramıyor mu? Başka bir şekilde ne demek istiyorsun? Bizi buraya yardım etmeden önce neyi denediniz? Aldığınız hatalar neler? – androidnation

+0

en son 3 kaydı alırsanız cevabınız çalışacaktır. Başka bir yolla ne demek istediğimi en son kayıtla birlikte, sorgu, SELECT * FROM kaydırıcısı ORDER BY date DESC LIMIT 1' gibi bir şey olacaktır. ama en son 2. rekoru almak istediğimde, artık nasıl yapılacağına dair bir fikrim yok. aramayı denedim ama tüm elde ettiğim en son 3 kaydı bir seferde nasıl alacağımı, ne yapmaya çalıştığımı değil. @androidnation – louie

+0

Bir dizideki tüm satırları getirmeye çalışın ve ardından sonuncu değerini sonuncusu olsun: – androidnation

cevap

1

LIMIT ve OFFSET kullanarak bir çözüm.

-- latest 
order by desc id/col_date desc limit 1 

-- 2nd to latect 
order by desc id/col_date desc limit 1,1 

-- 3rd to latect 
order by desc id/col_date desc limit 2,1 

Demo:

Referans
mysql> select * from (select 1 as a union select 2 union select 3) t; 
+---+ 
| a | 
+---+ 
| 1 | 
| 2 | 
| 3 | 
+---+ 
3 rows in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1; 
+---+ 
| a | 
+---+ 
| 3 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 1,1; 
+---+ 
| a | 
+---+ 
| 2 | 
+---+ 
1 row in set (0.00 sec) 

mysql> select * from (select 1 as a union select 2 union select 3) t order by a desc limit 2,1; 
+---+ 
| a | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

:

http://dev.mysql.com/doc/refman/5.7/en/select.html

LIMIT deyimi satır sayısını sınırlamak için kullanılabilir SELECT ifadesinin döndü. SINIR parametreleri kullanılarak belirtilebilir, hazırlanan tabloları kapsamında

: SINIR bu istisna dışında hem negatif olmayan bir tamsayı sabitler olmalıdır bir ya da iki sayısal argüman, alır? yer tutucu işaretçileri.

Kaydedilen programlarda, LIMIT parametreleri tamsayı değerli rutin parametreleri veya yerel değişkenler kullanılarak belirtilebilir.

İki bağımsız değişkenle, ilk bağımsız değişken, ilk satırının döndürülen satırını döndürür ve ikinci, döndürülen maksimum satır sayısını belirtir. İlk satırın ofseti 0'dır (1 değil):

SELECT * tbl LIMIT 5,10; # Satırları al 6-15

+0

neden 1,1 ve 2,1? Üzgünüm, sadece neden böyle olduğunu bilmek istiyorum. :) – louie

+0

Vay, sen bir dahisin! Çok teşekkür ederim beyefendi! çok takdir ediyor. ve referans için de teşekkür ederim! – louie