SQL İle Tüm Kayıtları Tek Satırda Birleştirme Yöntemi

Murat ÖNER

1989 yılında Kocaelinin Dilovası ilçesinde doğdum ilkokul ve lise eğitimimi Kocaeli’de aldım, önlisans üniversite eğitimimi Mehmet Akif Ersoy Üniversitesi Gölhisar Meslek Yüksekokulu’nda bilgisayar programcılığı bölümünde yaptım. Üniversite dönemi boyunca Microsoft'un student partner projesinde yer aldım ve diğer student partner öğrencileri ile birçok farklı projede yer aldım. Üniversite eğitimi tamamlandıktan sonra staj yapmış olduğum Ries Technologies şirketinde yazılım geliştirici ve web designer olarak görev aldım ardından Gen Yazılım firmasında ERP ve HBYS sistemleri ile ilgili yazılım geliştirmeye devam ettim. Şuan aktif olarak mobil, web ve masaüstü uygulamalar geliştirmeye devam etmekteyim.

12 Cevaplar

  1. Erden Sarıgül dedi ki:

    Üstad teşekkürler işime yaradı

  2. Halit AYÇİÇEK dedi ki:

    Merhaba hocam,

    Benim ihtiyacım olan sorgu ProductIDAndCategoriID tablosunda tuttuğum bir ürünün birden fazla kategoriye girmesi çekeceğim sorguda da aynı ürüne ait kategorileri tek satırda göstermek. Aşağıdaki

    çektiğim sorgu aşağıdaki gibi dönmeli bunu nasıl yaparım yardımlarınzı rica ediyorum. Teşekkürler.

    ProductID CategoriID

    1 2,3,5,6,7
    2 5,9,10,12,18

  3. Emre Bayram dedi ki:

    Merhaba. Bu konuya benzer bir sorum olacak.

    ID Tarih Tip
    1 01.01.2017 1
    1 02.03.2017 2
    2 03.04.2017 1
    2 04.04.2017 2

    Yukarıdaki tabloyu ID ye göre gruplama yaparak göstermek istiyorum. Ancak 2 adet tarih olacak. Tip 1 olanlar Tarih 1 , Tip 2 olanlar Tarih 2 kolonuna yazılacak. Bunu nasıl yapabilirim acaba?

    Örn:
    ID Tarih1 Tarih2
    1 01.01.2017 02.03.2017
    2 03.04.2017 04.04.2017

    • Murat ÖNER dedi ki:

      Merhaba,

      Eğer gruplanacak id değeri dinamik olarak sayısı 2’den fazla olmayacak ve en fazla 2 olacak ise alttaki subquery’li çözüm ihtiyacınızı giderebilir.

      Sonuca şu linkten bakabilirsiniz: http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=97c49f005f58431a07c266c7343c77eb

      • Emre Bayram dedi ki:

        Merhaba,

        İlginiz için teşekkür ederim. Bu çözüm işimi görüyor ancak müsadeniz olursa size bir fikir danışmak istiyorum.

        Bir CRM geliştirdim. Arka planda bir sürü modül ve kullanıcı bir yetkilendirme kontrolü ile çalışıyor. Ben bu sistem için güzel bir Log modülü geliştirmek istiyorum. Yapılan sorguları, güncelleme, ekleme, silme, Mail gönderme, Yazıcıdan çıktı alma vs vs herşeyi kayıt altına alan bir yapı oluşturmak istiyorum. Yukarıdaki takıldığım kısım aslında bu yapı içerisindeki Oturum açma ve Kapatma kayıtlarını nasıl kayıt altına alırım diye düşünürken çıktı.

        Normalde sadece tek tarih (LogTarihi) olarak işlemleri kayıt altına alacaktım. Sonrasında Oturum açıldığında açılan oturumun ne zaman kapandığı bilgisinin lazım olabileceğini düşündüm ve LogStartDate ve LogEndDate diye 2 tarih mi yapayım yoksa aynı session için Oturum açıldı ve Kapandı diye 2 kayıt mı açayım fikri arasında kaldım. Çift tarih kullanırsam birçok kayıt için tarih alanlarından birisi boş kalacak. Ancak tek tarih kullanırsam da her session için çift kayıt oluşmuş olacak ve bu 2 kaydı birleştirmek için kullanılan sorgu daha fazla yoracak sistemi.

        Uzun bir yazı olduysa kusura bakmayın ama sizce bir Log tablosu nasıl olmalı, Ne tür kayıtlar ve ne tür alanlar ile tutulmalı. Ve yukarıdaki gibi bir düşünce içerisinde olsaydınız hangisini yapardınız?

        İlginiz için şimdiden teşekkür ederim…

        • Murat ÖNER dedi ki:

          Rica ederim inşallah ihtiyacınızı karşılar.

          Log tablosu konusunda daha önce onlarca projedeki tecrübelerime dayanarak belki yol gösterebilirim ama doğruluğu elbetteki tartışılabilir projelerimde klasik olarak log tablom şu şekilde oluyor.

          ID – Otomatik Artan Sayı vey Guid,
          FormName yada PageName – İşlemin eğer web projesi ise hangi sayfadan windows projesi ise hangi form’dan yapıldığını belirtebileceğimiz alandır,
          EventName – Benzersiz bir olay adı girmelisiniz,
          Data – Hangi veriler üzerinden işlem yapıyorsanız bu verileri isterseniz metinsel olarak birleştirip kaydedebilirsiniz isterseniz blob bir nesne olarak kaydedebilirsiniz,
          DurationMilliSeconds – Yapılan işlemin süresini tutabilirsiniz,
          Description – Log’un ne olduğunu anlatan kısa ve öz açıklama.
          CreatedDate – Logun oluşturulma tarihi ve saati,
          CreatedUser – Oluşturan kullanıcı diye adlandırılabilir ama alana verilecek değer sistem eğer kullanıcı bazlı çalışıyor ise kullanan kişinin id’si verilebilir.
          IP – Projenin kullanıldığı ip adresi kaydedilmelidir.

          Benim önerebileceğim örnek log tablosu bu şekilde olabilir belirtmiş olduğunuz gibi kullanıcının sırf giriş çıkışı için 2 tarih alanı ile hiç kullanılmayacak kullanıcı girişi haricindeki diğer olaylarda belkide hiç kullanılmayacaktır o yüzden kullanıcının çıkışınıda farklı bir olay olarak kaydetmelisiniz ki şöyle bir durumda söz konusu olacaktır kullanıcı giriş yaptı ama çıkış yapmadan tarayıcıyı kapattı fakat henüz oturumu sona ermediği için kullanıcının çıkışını kayıt altına alamacayaksınız çünkü kullanıcı çıkış işlemi gerçekleştirmedi size tarayıcı kapattığında bu durumu kullanıcı çıkış yaptı olarak algılarsanız bir mantıksızlık ortaya çıkacağından ayrı bir kayıt olarak eklemeniz daha doğru olacaktır fakat belirtmiş olduğum gibi kullanıcının giriş yapıp çıkış yapmadığı çünkü kendi isteği ile oturum kapatma işlemi gerçekleştirmeyip oturum süresi dolduğu için sistem tarafından otomatik kapatılma işlemi gereçekleştiğinden çıkış logu alamayacaksınızdır ama illaki çıkışıda yakalamak istiyorum derseniz şöyle yapmanız mümkün session timeout event’inde session’da ilgili kullanıcıya ulaşıp çıkış log’unu bu şekilde yapıp sorunu giderebilirsiniz.

      • Emre Bayram dedi ki:

        Merhaba,

        Yanlış birşey mi sordum. Yorumumu silmişsiniz?

        • Emre Bayram dedi ki:

          Pardon. Denetim için bekleniyormuş o sebeple görünmüyordu. Şimdi hepsi birden göründü. Kusura bakmayın 🙂

Bir Cevap Yazın

%d blogcu bunu beğendi: