|
|
#1 (permalink) |
|
Üyelik Tarihi: 24.02.2003
Yer: İstanbul
Yaş: 23
Mesaj: 92
|
Php + SQL Sıralama Sorunu
Merhabalar,
Benim sorunum sıralamayla alakalı. Elimde UYENO - INT(4) , Primary Key - ve KAYITNO - VARCHAR(25) - alanları olan bir tablo var. SELECT KAYITNO FROM listeler WHERE KAYITNO LIKE "a%" ORDER BY KAYITNO DESC Sorgusunu kullanığımda : A99 A98 A96 A101 A1001 A100 sonucunu alıyorum. Aynı şekilde : SELECT MAX( KAYITNO ) FROM listeler WHERE KAYITNO sorgusunu kullandığımda ise : A99 sonucunu alıyorum. Benim istediğim A1001 sonucunu alabilmek, teoride yukarıdaki iki sorgunun sonucundada ilk sırada A1001 i almam gerekiyor - sanırım ?? - ama olmuyor. sorun nedir nerede yanlış yapıyorum ? Yardımcı olursanız sevinirim ? İyi Çalışmalar, Aydın "Denwer" Ü. |
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 06.07.2001
Yer: Ankara
Yaş: 33
Mesaj: 679
|
Problemin kayıt no allanının varchar turu olmasından kaynaklanıyor onu int'e cevirmen sorunu halledecektir.
Diğer bir çözüm yolu ise(yok abi bana varchar lazım dersen) şu şekilde sorgular kullanman lazım SELECT KAYITNO,KAYITNO+0 AS sirali FROM listeler WHERE KAYITNO LIKE "a%" ORDER BY sirali DESC
__________________
uzaytek.com |
|
|
|
|
|
#3 (permalink) |
|
Üyelik Tarihi: 28.05.2001
Yer: Bursa
Yaş: 25
Mesaj: 198
|
uzaytek 'in de dediği gibi sorun değer string olduğu için A99 A1000 den büyük çünkü string sıralamalarda mantık soldan sağa doğru en büyük değerleri dizmek üzerine kurulur. Eğer bundan kurtulmak istiyorsan A0099 şeklinde kayıt yapabilirsin girmelisin.
|
|
|
|
|
|
#5 (permalink) |
|
Üyelik Tarihi: 24.02.2003
Yer: İstanbul
Yaş: 23
Mesaj: 92
|
Ewt uzaytek'in dediği baya mantıklı. Hemen denemelerini yapacam. Eğer sorun hala dewam ederse ( ki sanrım bu benim başarısızlığımdan olur ) kullanmayı düşündüğüm sabah aklıma gelen uzuuuuuun ama çalışan bir yol war:
ilk olarak kayıtno alanındaki en büyük uzunluğu bulmak ( SELECT MAX(LENGTH(KAYITNO)) FROM listeler ), daha sonra tabloda bu değere göre bir arama yapmak ( Select Max(KAYITNO) From Listeler WHERE KAYITNO LIKE "a%" AND LENGTH( KAYITNO ) = 5 ; // burada 5 bir önceki sorgudan elde ettiğim değer ) . Dediğim gibi uzuuun ama çalışıyor... Burda yazarken aklıma takıldı düşündüm ama bulamadım : bu yukarıdaki iki sorguyu tek adımda yaptırıp (araya ; koyarak ) ilkindeki değeri (5) ikinci sorguya aktarmanın bir yolu varmıdır ? İlginiz İçin Teker Teker Teşekkür Ederim, İyi Çalışmalar, Aydın "Denwer" Ü. |
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 06.07.2001
Yer: Ankara
Yaş: 33
Mesaj: 679
|
@AnIL fikir benimde aklıma gelmemisti zaten
![]() @Denwer SELECT MAX( kayitno + 0 ) FROM listeler type dönüşümleri için MySQL manual'de set type diye arayabilirsiniz.
__________________
uzaytek.com |
|
|
|
|
|
#7 (permalink) | |
|
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
|
Alıntı:
Kod:
Select Max(KAYITNO) From Listeler WHERE KAYITNO LIKE "a%" AND LENGTH( KAYITNO ) = (SELECT MAX(LENGTH(KAYITNO)) FROM listeler ) Yeni versiyonda butip içiçe SQL lere desteke hakkında birşeyler vardı ancak tam bilmiyorum.
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site! |
|
|
|
|
Zoque'a hoşgeldiniz!