Brigand Mesaj tarihi: Şubat 14, 2009 Paylaş Mesaj tarihi: Şubat 14, 2009 Selamlar; Şindik şöyle bir örnek veriyim hemen, time'a göre ASC olarak sıralıyorum ama bugünün time'ından eski time'ları en sonra atıp sıralatmak istiyorum. Mesela bugünün time'ına 4 diyelim. 1-10 arası sayılar şöyle olmalı benim istediğime göre 4,5,6,7,8,9,10,1,2,3 Bunu MySQL'de yapabilirmiyiz? Yapamıyorsam sql ile iki sorguda yaptıracam. Ama yapabiliyorsak hoş olur yani. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Sailor Mesaj tarihi: Şubat 14, 2009 Paylaş Mesaj tarihi: Şubat 14, 2009 iki ayrı sorgu gibi yapıp union ile birleştirebilirsin, herhalde en mantıklı çözüm bu olacaktır Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Şubat 14, 2009 Paylaş Mesaj tarihi: Şubat 14, 2009 Evet en rahatı öyle olur. Ama yok ben dehşet sorgular yaparım deyip uğraşmak istersen tek sorgu için fikir vereyim. ORDER BY dedikten sonra iki değer verirsen nasıl çalıştığını biliyorsundur. İlk verdiğine göre sıralıyor, sonra aynı olan değerleri ikinci verdiğine göre sıralıyor. Bundan şöyle yararlanabilirsin: Sorgunda ek bir sütun yaratıp istediğin günden önce olanlara bir değer, istediğin günden sonra olanlara başka bir değer verebilirsin. Sonra da kalkıp ilk önce bu sütuna göre, sonra zaman sütununa göre sıralarsın. Mesela orjinal tablo şöyle olsun: isim | sayı pati | 1 veli | 5 bora | 4 4'dan önce gelen sayılar için ek sütun (sayı 4'dan küçükse x = 0, büyükse x = 1) isim | x | sayı pati | 0 | 1 veli | 1 | 5 bora | 1 | 4 sorgu ise fikir olarak şöyle: SELECT isim, blah AS x, sayı .. ORDER BY x DESC, sayı ASC Hafif zorlayabilecek kısım o ek sütunu hazırlamakta. CASE falan kullanman gerekebilir. Ya da boolean ile yapabilirsin. Başka yöntemler de vardır tabi. :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Brigand Mesaj tarihi: Şubat 14, 2009 Konuyu açan Paylaş Mesaj tarihi: Şubat 14, 2009 Mirage o ek sütunu tabloya ben mi ekleyecem? Yani ALTER ile tabloyu değiştirip bir sütun ekle mi diyorsun? Çünkü dediğim şey bir zamanı sıralamak olduğu için zaman sürekli değişken olacaktır ve dediğin gibi sütun ekleyip 0,1 gibi değer vermek işe yaramayacaktır çünkü bugünün 1 değeri yarın 0 olabilir, sürekli güncellemek gerekir. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Şubat 14, 2009 Paylaş Mesaj tarihi: Şubat 14, 2009 Hayır hayır tabloyu değiştirmeyeceksin. Sütunu sonuç tablosuna ekleyeceksin. Aggregate function kullanman gerekecek muhtemelen ya da CASE kullanman gerekecek: http://databases.about.com/od/sql/l/aaaggregate1.htm Mesela şöyle bir tablo düşün: isim, ürün tipi, stok sayısı Bütün ürün tiplerini listeyelip, o tipten stokta kaç ürün var bakmak için şöyle bir şeyler yazılır genelde: SELECT ürün tipi, SUM(stok sayısı) AS yeni_sütun FROM hede GROUP BY ürün tipi ORDER BY yeni_sütun Burda "yeni_sütun" dediğim sütunu sorgu sırasında sonuç tablosuna eklemiş oluyorsun. ORDER BY kullanarak bu yeni sütuna göre sıralayabiliyorsun. Yukarda verdiğim örnekte de buna benzer bir sütun etkleyip, sütun içinde bahsettiğin günden önce olanlarla sonra olanları ayırabilirsin. Senin durumunda böyle bir şey uygulamak karışık ve muhtemelen pek verimli değil. Ama yine de bu tür şeylerde "nasıl yapılır acaba" diye kafa yormak geliştirici olabiliyor. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Brigand Mesaj tarihi: Şubat 15, 2009 Konuyu açan Paylaş Mesaj tarihi: Şubat 15, 2009 Evet evet ondan dedim zaten yoksa php ile de yapabilecek durumdayım istediğim şeyi ama sql ile yapmak istiyorum eğitici olsun diye :) Mirage, Sailor teşekkürler. Şu anda malum önerilerinizi test edemiyorum saate bağlı olarak :), yarın bakacağım bunlara teşekkür ederim :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mum_Chamber Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 çok sallama ve deneysel olarak yazıyorum, mantık hataları olması mümkündür. SELECT * FROM hedehodo ORDER BY cast(-1*(sayi-4) AS CHAR) 4'ten büyükleri önce görmek istiyorsun diye şeyettim. tablodaki sayı sütunundan 4 çıkarınca senin sona gelmesini istediklerin negatif sayılar oluyorlar. fakat char sıralamasında - işareti sayılardan önce geliyor. bunu çözmek için ise -1 ile çarpıyoruz. yani senin ilk görmek istediğin sayılar -, istemediklerin + kalıyolar. sayılar değişiyor, ama sıraları değişmiyor. fakat -2, -1'den küçük bir sayı olduğu için int olarak sıralayamıyoruz, char olarak sıralıyoruz. fakat şöyle bir sorun var ki, char sıralamasında -1, -2'den önce geldiği gibi, -10 da -2'den önce geliyor, ona nasıl çözüm bulursun bilemiyorum =) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
riglous Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 select * from my_table ORDER BY id-5 dersen 4'ten baslayarak sonrasini dizer. Aklinda olsun 0 ve 1 genelde ilk sorguya refer eder. Fazla komplike dusunmemek gerek :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Baggio Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 . Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Brigand Mesaj tarihi: Şubat 15, 2009 Konuyu açan Paylaş Mesaj tarihi: Şubat 15, 2009 @Mum Mantık süper :) @riglous Harbi fazla komplike düşünmemek gerekmiş, saolasın :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
riglous Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 Mum_Chamber said: çok sallama ve deneysel olarak yazıyorum, mantık hataları olması mümkündür. SELECT * FROM hedehodo ORDER BY cast(-1*(sayi-4) AS CHAR) 4'ten büyükleri önce görmek istiyorsun diye şeyettim. tablodaki sayı sütunundan 4 çıkarınca senin sona gelmesini istediklerin negatif sayılar oluyorlar. fakat char sıralamasında - işareti sayılardan önce geliyor. bunu çözmek için ise -1 ile çarpıyoruz. yani senin ilk görmek istediğin sayılar -, istemediklerin + kalıyolar. sayılar değişiyor, ama sıraları değişmiyor. fakat -2, -1'den küçük bir sayı olduğu için int olarak sıralayamıyoruz, char olarak sıralıyoruz. fakat şöyle bir sorun var ki, char sıralamasında -1, -2'den önce geldiği gibi, -10 da -2'den önce geliyor, ona nasıl çözüm bulursun bilemiyorum =) mod 10000 yaparsan daha mantikli olur. Hepsini number yapmis olursun, boylece daha hizli islem yapilir. Char olarak karsilastirmak cok uzun surer. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 riglous said: select * from my_table ORDER BY id-5 dersen 4'ten baslayarak sonrasini dizer. Anlamadım ben bunu. Küçükten büyüğe sıralarken negatif sayı en başta olmayacak mı? riglous said: Aklinda olsun 0 ve 1 genelde ilk sorguya refer eder. Hele bunu hiç anlamadım. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Brigand Mesaj tarihi: Şubat 15, 2009 Konuyu açan Paylaş Mesaj tarihi: Şubat 15, 2009 Evet o 0 ve 1 olayını ben de anlamadım. Ama deneim ve riglous'un dediği oldu. Yani şöyle sıralıyor 45678910231 diye salladım 0231 kısmını sıralamıyor onları sql'e girildiği şeklinde alıyor direk. Onlar negatif oluyorlar bu arada. Yani bi iki denedim böyle olduğunu gördüm ben. Niye öyle yaptığını da çözemedim wallaha :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
riglous Mesaj tarihi: Şubat 15, 2009 Paylaş Mesaj tarihi: Şubat 15, 2009 Sen order by'da hicbir sey belirtmezsen, tabloda gozukmeyen rowid diye bir kolon vardir (mysql'de ne deniyor bilmiyorum, oracle'da rowid), her halukarda onu kullanir. id-4 dersen ilk 4 id'yi atliyor, daha sonra gelenleri listeliyor, sona da id olarak alamadiklarini diziyor ki bu asamada rowid'yi kullaniyor. Eger mod kullanirsan muhtemelen calisir, zira -1 10'luk sistemde 9'a map eder, vs. vs. Soyle yapiyoruz, id'lerin oldugu kolonu aliyorsun her halukarda; select *, mod(id-4,10000) order_by_row from my_table order by order_by_row gibi bir sey yaparsan calisir muhtemelen 0 ve 1 diye bahsettigim... Bununla alakasi yok, ben olaylari karistirdim. id'leri siralarken 0'dan basladigini dusunmemistim, id-4 yaptim ilk basta. Sonra calismayinca nooluyoruz dedim o satiri yazdim, aciklamasi spoiler'da, konumuzla bi alakasi yok. Simdi mysql'den emin degilim ama muhtemelen onda da aynidir, eger sen substr(text, 0, 10) dersen text'ten 0'dan baslayarak ilk 10 karakteri almasi gerekli. Ayni mantikla substr(text, 1, 10) yazinca ilk karakteri atlamasi gerekli ama oyle olmuyor. 0 ve 1 ayni yerden baslatiyor. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar