Our social:

Latest Post

15 Nisan 2016 Cuma

SQL / MySQL - Union ve Union All kullanımı

Bu yazıda SQL'de UNION ve UNION ALL komutlarının ne işe yaradığını, nasıl kullanılacağını anlatmaya çalışacağım.

UNION ve UNION ALL komutları ile birden fazla sorguyu birleştirerek tek sonuç elde ederiz.

UNION komutu, sonuçların duplicate edilmesini engeller. Yani union komutu, DISTINCT komutu ile select sorgusu yazmak gibi düşünülebilir.

UNION ALL'da ise kayıtların duplicate olup olmadığına bakılmaz.

Komutlar hakkında kısa bilgi verdikten sonra örneğe geçiyorum.

"uye" adında bir tablom var ve tabloda aşağıdaki gibi 7 kayıt bulunuyor.



Şimdi Ulke alanı ABD olan kayıtları çekiyorum.

 SELECT * FROM uye WHERE Ulke = 'ABD'  




No alanı 30'dan büyük olan kayıtları çekiyorum.

 SELECT * FROM uye WHERE No > 30  



Şimdi bu kayıtları UNION ALL kullanarak birleştiriyorum.

 SELECT * FROM uye WHERE Ulke = 'ABD'  
 UNION ALL  
 SELECT * FROM uye WHERE No > 30  


Görüldüğü gibi Bobby Dixon'ın ülkesi ABD ve numarası 30'dan büyük olduğu için sorgu sonucunda iki kere gözüktü.

Şimdi UNION ALL yerine UNION komutunu kullanıyorum.

 SELECT * FROM uye WHERE Ulke = 'ABD'  
 UNION  
 SELECT * FROM uye WHERE No > 30  


Bu sefer Bobby Dixon için de sadece bir sonuç döndü.

8 Nisan 2016 Cuma

Sayfa aşağı kaydıkça içerik yükleme - scroll paging (sayfalama)


Bu yazıda scroll aşağı kaydırıldığında içerik yükleme işlemini basit bir şekilde anlatmaya çalışacağım.

Çok fazla veriyi aynı anda çekerek ekrana basmak performans açısından sorun çıkarabilmekte. Bunu engellemek için kullanılan yöntemlerden bir tanesi de scroll'u kullanarak sayfalama yapmak.



1'den 18'e kadar olan sayıları yazılışlarıyla beraber ekrana yazdıracağım. Sayfa yüklendiğinde 1'den 9'a kadar olan sayıları, yüklendikçe de sıradaki 3 sayıyı (10,11,12 / 13,14,15 gibi) yazdıracağım.

body altına aşağıdaki gibi 9 sayıyı ekliyorum.

 <div id="items" class="col-xs-12 col-sm-8 col-sm-offset-2">  
      <div class="item col-xs-3">  
           <span class="letter">Bir</span>  
           <span class="number">1</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">İki</span>  
           <span class="number">2</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Üç</span>  
           <span class="number">3</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Dört</span>  
           <span class="number">4</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Beş</span>  
           <span class="number">5</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Altı</span>  
           <span class="number">6</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Yedi</span>  
           <span class="number">7</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Sekiz</span>  
           <span class="number">8</span>  
      </div>  
      <div class="item col-xs-3">  
           <span class="letter">Dokuz</span>  
           <span class="number">9</span>  
      </div>  
 </div>  

Javascript tarafında üzerinde letter ve number olan listemi tanımlıyorum.

 var itemList = [  
      { letter: 'Bir', number: 1 },  
      { letter: 'İki', number: 2 },  
      { letter: 'Üç', number: 3 },  
      { letter: 'Dört', number: 4 },  
      { letter: 'Beş', number: 5 },  
      { letter: 'Altı', number: 6 },  
      { letter: 'Yedi', number: 7 },  
      { letter: 'Sekiz', number: 8 },  
      { letter: 'Dokuz', number: 9 },  
      { letter: 'On', number: 10 },  
      { letter: 'On bir', number: 11 },  
      { letter: 'On iki', number: 12 },  
      { letter: 'On üç', number: 13 },  
      { letter: 'On dört', number: 14 },  
      { letter: 'On beş', number: 15 },  
      { letter: 'On altı', number: 16 },  
      { letter: 'On yedi', number: 17 },  
      { letter: 'On sekiz', number: 18 },  
 ];  

Şimdi scroll'un en alta geldiğini bulmak için gerekli fonksiyonu yazıyorum. Her scroll'da 3 item çekmek istediğim için, oluşturmuş olduğum pageSize değerini 3 yaptım. lastPage değişkeninde ise item sayısını pageSize'a bölerek görüntülenen son sayfayı buldum. pageSize ve (lastPage + 1) değerleriyle GetNextPage fonksiyonunu çağırdım.

 $(window).scroll(function(){  
      if($(window).scrollTop() == $(document).height() - $(window).height()) {  
           var pageSize = 3;  
           var lastPage = $("#items").find(".item").length / pageSize;  
           GetNextPage(lastPage + 1, pageSize)  
      }  
 });  

GetNextPage fonksiyonunda son index'i bularak sonraki 3 ürünün çekilmesini sağladım.

 function GetNextPage (page, pageSize) {  
      var result = [];  
      var lastIndex = ((page - 1) * pageSize);  
      for(var i = lastIndex; i < (lastIndex + pagesize); i++) {  
           result.push(itemList[i]);  
      }  
      DrawNextPage(result);  
 }  

DrawNextPage fonksiyonunda ise dönen değerleri kullanarak html append işlemini gerçekleştirdim.

 function DrawNextPage (data) {  
      if(data != null && data.length > 0) {  
           var content = "";  
           for(var i = 0; i < data.length; i++) {  
                content += '<div class="item col-xs-3">';  
                content += '     <span class="letter">' + data[i].letter + '</span>';  
                content += '     <span class="number">' + data[i].number + '</span>';  
                content += '</div>';  
           }  
           $("#items").append(content);  
      }  

} DEMO - DOSYALAR

12 Eylül 2015 Cumartesi

PHP'de jQuery/Ajax kullanarak arama yapma - 2.Part

Bu yazı buradaki yazının devamıdır.

Kaldığımız yerden devam ediyoruz.

Sehirler.php dosyamı açarak içerisine aşağıdaki gibi görsel ögelerimi ekliyorum.


SehirAdi şeklinde bir text alanım var. Bu alandaki yazı değiştiğinde veri tabanına giderek girilen text'e uygun kayıtları getirmem gerekiyor. Bunun için de jquery'deki "keypress" fonksiyonunu kullanacağım.

script.js dosyamın ready fonksiyonuna yazmaya başlıyorum.


Input üzerinde tuşa her tıklandığında "AjaxRequest" fonksiyonu tetiklenecek.

Şimdi AjaxRequest fonksiyonumu yazıyorum.


Görüldüğü gibi AjaxRequest fonksiyonum da son derece basit ve anlaşılır. Gelen "word" değeri ile 1.part'ta kontrol amacıyla gittiğimiz url'e istekte bulunuyoruz ve dönen json objesini SehirleriCiz fonksiyonuna gönderiyoruz.

Artık sadece SehirleriCiz fonksiyonu kaldı. O fonksiyonu da aşağıdaki gibi oluşturuyoruz.


Şimdi sayfamızı test edebiliriz.




PHP'de jQuery/Ajax kullanarak arama yapma - 1.Part

Bu yazıda PHP ile AJAX kullanımından bahsedeceğim. Facebook'ta olduğu gibi arama alanına herhangi bir şey yazmaya başladığımızda, yazdığımız kelimeye uygun sonuçları bularak aşağıda göstereceğiz.

İlk olarak kullanacağım dosyaları ve bu dosyalarda hangi işlemleri gerçekleştireceğimi özetleyeyim.


Sehirler.php dosyasına bir text input ile bir div ekleyeceğim.

conn.php dosyasında veri tabanı işlemlerini gerçekleştireceğim.

ajax.php dosyasında conn.php'den bir fonksiyon çağırıp, json döneceğim.

script.js dosyasında jquery işlemlerini gerçekleştireceğim.

jquery.js'nin ne olduğunu zaten hepimiz biliyoruzdur :)

İlk olarak veri tabanı işlemlerimi halletmek için conn.php dosyasında MySQL veri tabanı bağlantısını kuran fonksiyon ile şehirleri getiren fonksiyonu yazıyorum.


Ardından ajax.php dosyamı açarak içerisini aşağıdaki gibi düzenliyorum.


Görüldüğü gibi "op" değerine "SehirleriGetir" yazılması durumunda conn.php'de bulunan SehirleriGetir fonksiyonunu çalıştırıyoruz. Şu ana kadar yaptıklarımızı görmek için tarayıcımdan ajax.php?op=SehirleriGetir&word=ad linkine gidiyorum.


Yukarıdaki gibi bir sonuç dönüyor. Şehir isminde "ad" bulunan şehirler getirilmiş oldu. Veri tabanındaki tablomda bulunan şehirler aşağıdaki gibiydi.


Yazının çok uzun olmaması ve daha kolay takip edilebilmesi için iki parçaya ayırdım. Aşağıdaki linkten okumaya devam edebilirsiniz.

DEVAMINI OKU

19 Mart 2015 Perşembe

Android'de Bluetooth kontrolü

Bu yazıda Android uygulamalarımızda Bluetooth'un açık olup olmadığını nasıl kontrol edecebileceğimizi anlatmaya çalışacağım.

İlk olarak Bluetooth üzerinde işlem yapacağımdan, Bluetooth yetkisi için AndroidManifest.xml dosyama aşağıdaki satırları ekliyorum.




<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Şimdi Bluetooth'un açık mı yoksa kapalı mı olduğunu öğrenebilirim. Oluşturduğum Activity'ye kodlarımı yazmaya başlıyorum.

OnCreate fonksiyonunda BluetoothAdapter sınıfından nesne türetiyorum. Değer olarak da "BluetoothAdapter.getDefaultAdapter()" değerini veriyorum.

BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

Ardından "isEnabled()" fonksiyonunu kullanarak Bluetooth'un açık olup olmadığını anlıyorum ve buna göre ekranda bir toast gösteriyorum.

if(bluetooth.isEnabled()){
        Toast.makeText(this, "Bluetooth açık.", Toast.LENGTH_LONG).show();
        } else{
        Toast.makeText(this, "Bluetooth kapalı!", Toast.LENGTH_LONG).show();
        }

Sonucunda OnCreate fonksiyonu aşağıdaki gibi oldu.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
        if(bluetooth.isEnabled()){
        Toast.makeText(this, "Bluetooth açık.", Toast.LENGTH_LONG).show();
        } else{
        Toast.makeText(this, "Bluetooth kapalı!", Toast.LENGTH_LONG).show();
        }
    }

Artık uygulamamı kontrol edebilirim. Run ediyorum ve Bluetooth'um kapalı olduğu için aşağıdaki mesajı görüyorum.








14 Şubat 2015 Cumartesi

SQL'de aynı içeriğe sahip kayıtları bulma ve silme

Bu yazıda, SQL ile aynı içeriğe sahip farklı kayıtların (duplicate rows) nasıl bulunacağını ve bulunan bu kayıtların nasıl silineceğini anlatmaya çalışacağım.

Futbolcular adında bir tablomuz olduğunu düşünelim. Bu tablodaki kayıtlar da aşağıdaki gibi olsun.


Tabloda görebileceğiniz üzere Diego ve Mehmet Topal'ın olduğu satırlar birbirleriyle primary key'leri yani ID kolonu hariç birebir aynı. Caner Erkin'in olduğu satırlarda ise yalnızca FormaNo kolonları farklı.

İlk olarak primary key dışındaki tüm alanları aynı olan kolonları getirelim.

SELECT MAX(ID) as ID, Ad, Soyad, FormaNo FROM Futbolcular
GROUP BY Ad, Soyad, FormaNo
HAVING COUNT(*) > 1

Bu sorguyu çalıştırdığımda bana Ad, Soyad ve FormaNo alanları eşit olan kayıtların en büyük ID'ye sahip olanlarını getirmesi gerekiyor. Sorguyu çalıştırıyorum ve sonuç aşağıdaki gibi.


Şimdi ise FormaNo alanını sorgudan çıkardığımda Caner Erkin'in sonuçlar arasına eklenip eklenmediğine bakacağım. Sorgumu aşağıdaki gibi değiştiriyorum.

SELECT MAX(ID) as ID, Ad, Soyad FROM Futbolcular
GROUP BY Ad, Soyad
HAVING COUNT(*) > 1

Sonuç olarak FormaNo alanının eşit olma durumu aranmadığı zaman Caner de sonuçlar arasında görünüyor.


Bu kayıtları silmek istediğimizde ise aşağıdaki gibi bir sorgu kullanabiliriz.

DELETE FROM Futbolcular
WHERE ID IN
( SELECT MAX(ID) as ID FROM Futbolcular
GROUP BY Ad, Soyad, FormaNo
HAVING COUNT(*) > 1)

17 Ekim 2014 Cuma

ASP.Net (C#) - thumbnail oluşturma - resize

Bu yazıda C# kullanarak thumbnail oluşturma işlemini anlatacağım.

Öncelikle thumbnail'in ne olduğunu kısaca açıklayayım. Thumbnail; web sitelerinde yer alan resimlerin önizlemesi olarak kullanılan küçük boyutlu halleridir.

Bu yazıda sayfama POST ile bir resim göndereceğim ve bu resmi hem orjinal boyutu hem de küçültülmüş hali ile klasöre kaydedeceğim.

Öncelikle resmi post edecek formumu UploadImage.aspx adlı dosyamda oluşturuyorum.

<form id="form1" enctype="multipart/form-data" runat="server" >
   <input type="file" name="resim" />
   <asp:Button ID="btnKaydet" runat="server" Text="Kaydet" OnClick="btnKaydet_Click" />
 </form>

Şimdi UploadImage.aspx.cs dosyasına giderek kodlarımı yazmaya başlıyorum.

protected void btnKaydet_Click(object sender, EventArgs e)
        {
            if (Request.Files.Count > 0)
                // POST ile gelen dosya sayısını kontrol ediyorum.
            {
                int Genislik = 100; //Thumbnail'in genişliği
                int Yukseklik = 100; //Thumbnail'in yüksekliği
                Bitmap Thumbnail = new Bitmap(Genislik, Yukseklik);
                // Genişlik ve yüksekliği belirterek yeni bir Bitmap oluşturuyorum.
                Bitmap OrjinalResim = new Bitmap(Request.Files[0].InputStream);
                // Gelen resim dosyasını stream ederek başka bir Bitmap oluşturuyorum.
                Graphics Kanvas = Graphics.FromImage(Thumbnail);
                // Yeni bir kanvas oluşturuyorum. Resmi bunun üzerine çizeceğim.
                Kanvas.DrawImage(OrjinalResim, new Rectangle(0, 0, Genislik, Yukseklik), 0, 0, OrjinalResim.Width, OrjinalResim.Height, GraphicsUnit.Pixel);
                // Resmi çiziyorum.
                OrjinalResim.Save(Server.MapPath("~/images/") + "Orjinal.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                // Orjinal resmi kaydediyorum.
                Thumbnail.Save(Server.MapPath("~/images/") + "Thumbnail.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                // Thumbnail resmi kaydediyorum.
            }
        }

Sayfamı çalıştırıyorum ve resmi seçerek "Kaydet" butonuna basıyorum.

Resimlerim klasöre kaydedildi.


Orjinal resim


Yeniden boyutlandırdığım thumbnail

 

20 Ağustos 2014 Çarşamba

Genymotion - Eclipse entegrasyonu

Bir önceki "Genymotion ile Android sanal cihaz kurulumu" başlıklı yazımda Genymotion programını kullanarak sanal cihazların nasıl kurulacağını anlatmıştım.

Bu yazıda da kurduğumuz sanal cihazların Eclipse ile entegrasyonunun nasıl yapılacağını ve projelerimizi oluşturduğumuz sanal cihazlar üzerinde nasıl çalıştıracağımızı anlatacağım.

Eclipse'te Help -> Install New Software... menüsüne gidiyoruz.


Work with: kısmına http://plugins.genymotion.com/eclipse yazıyoruz. Genymobile yanındaki checkbox'ı işaretliyoruz ve Next diyoruz.



Daha sonra kurulum işlemini tamamlıyoruz. Eclipse'i yeniden başlatıyoruz. Eclipse yeniden başladığında aşğıdaki resimde işraetlediğim Genymotion simgesi gelmiş oluyor.


Window -> Preferences menüsünden ayarlara gidiyoruz ve aşağıdaki resimde olduğu gibi Genymobile -> Genymotion sekmesine gidiyoruz.

Dosya yolu olarak Genymotion uygulamasının kurulu olduğu dizindeki Genymotion klasörünü seçiyoruz.



Projeyi sanal cihazda çalıştırma

Projeyi çalıştırmak için Genymotion iconuna tıklıyoruz. Ardından cihazımızı seçerek Start... diyoruz.


Cihazımız çalıştıktan sonra projemizi çalıştırıyoruz ve cihazlar arasında kurduğumuz sanal cihaz da görünüyor. Cihazı seçip OK butonuna tıkladığımızda projemizi çalıştırmış oluyoruz.



Genymotion ile Android sanal cihaz kurulumu

Bu yazıda Android programlamaya yeni başlayanlar ve Eclipse'te Virtual Device Manager yardımıyla oluşturulan sanal cihazların yavaşlığından şikayetçi olanlar için çok yararlı bir uygulama olan Genymotion hakkında bilgiler vereceğim.

Eclipse'te oluşturulan sanal cihazlar bazen açılmak bilmez ya da açılsa bile bilgisayarınızı o kadar kasar ki bütün hevesiniz kaçar. Bunu engellemek için Genymotion programını kullanabilirsiniz.

Öncelikle buraya tıklayarak Genymotion programını indiriyoruz. Genymotion programını çalıştırabilmek için bilgisayarımızda VirtualBox'ın kurulu olması gerektiğinden, VirtualBox kurulu değil ise with VirtualBox yazılı linkten indiriyoruz. VirtualBox zaten kurulu ise işletim sisteminize uygun olan exe'yi ayrıca indirebilirsiniz.

 Windows 32/64 bits (with VirtualBox)  -> indirmek için tıklayın.

İndirme işlemi bittikten sonra kurulumu tamamlıyoruz. Kurulum kısmında önemli ayarlar olmadığı için bu aşamayı detaylandırmıyorum.

Kurulum tamamlandıktan sonra Genymotion uygulamasını çalıştırıyoruz.

Yeni cihaz eklemek için Add butonuna tıklıyoruz.


Cihazları görebilmek için Connect butonuna tıklıyoruz.


Bağlantı sağlandıktan sonra cihazlar listelenecek. Kurmak istediğimiz cihaza tıklıyoruz ve Next diyoruz.


Karşımıza gelen ekrandan cihazın adını seçerek tekrar Next diyoruz.

Bu işlemin ardından dosyalar indirilmeye başlıyor.

İndirme işlemi bittikten sonra cihazımız kurulmuş oluyor. Cihazı seçip Play diyerek sanal cihazı çalıştırabiliriz.

Görüldüğü gibi cihazımız çalıştı.


Genymotin - Eclipse entegrasyonu

15 Temmuz 2014 Salı

VB.NET ile SQL veritabanı bağlantısı kurma

Bundan önce C# kullanarak Windows Form uygulamalarında ve Web Form uygulamalarında SQL bağlantısı kurma işlemini anlatmıştım. Bu yazımda da SQL veritabanına VB.net kullanarak bağlanma işlemini anlatacağım.

Bir web form oluşturuyorum. Formuma buton ve label ekliyorum. Butona tıklandığında SQL bağlantısını kurmaya çalışarak bağlantı sonucunu label içerisine yazdıracağım.

Butona çift tıklayarak .vb sayfasına gidiyorum ve sayfanın en üstüne SQL bağlantısı kurabilmek için gerekli olan kütüphaneleri ekliyorum.

Imports System.Data.Sql
Imports System.Data.SqlClient

Daha sonra butonun click eventının içine kodlarımı yazmaya başlıyorum.

İlk olarak bağlantı satırını oluşturuyorum.

Windows Authentication ile bağlanmak istiyorsanız aşağıdaki bağlantı satırını,

Persist Security Info=True;Initial Catalog=Veritabanı Adı;Data Source=PC-ADI\SQLEXPRESS;Packet Size=4096;Integrated Security=SSPI

Kullanıcı adı ve şifre ile bağlanmak istiyorsanız aşağıdaki bağlantı satırını kullanabilirsiniz.

Persist Security Info=True;User ID=Kullanıcı adı;Initial Catalog=Veritabanı adı;Data Source=Sunucu adresi;Packet Size=4096;Password=Şifre

Aşağıdaki gibi bağlantı satırımı oluşturuyorum.

Dim BaglantiSatiri As String = "Persist Security Info=True;Initial Catalog=DisciTest;Data Source=BERKAY-PC\SQLEXPRESS;Packet Size=4096;Integrated Security=SSPI"

Daha sonra SQL bağlantısı oluşturuyorum. Parametre olarak oluşturduğum bağlantı satırını ekliyorum.

Dim Baglanti As New SqlConnection(BaglantiSatiri)

Şimdi de C#'ta oldup-ğu gibi Try - Cache bloğu oluşturuyorum.

Try
    Baglanti.Open()
    Label1.Text = "Bağlantı başarılı."
Catch ex As Exception
    Label1.Text = "Hata !!!"
End Try

Sayfayı çalıştırıyorum ve butona tıklıyorum. Görüldüğü gibi bağlantım kuruldu.