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

15 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

    • Murat ÖNER dedi ki:

      Merhaba,

      Özür dilerim ama tam olarak yapmak istediğinizi anlamadım ilgili tablo yapısını bana mail yolu ile iletirseniz bu şekilde daha sağlıklı yardımcı olabilirim ve yapmak istediğiniz daha net biçimde belirtebilirseniz memnun olurum.

  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.

      SELECT 
      	ID, 
          (SELECT Tarih FROM dummy Table2 WHERE Table1.ID = Table2.ID AND Table2.Tip = 1) as Tarih1,
          (SELECT Tarih FROM dummy Table2 WHERE Table1.ID = Table2.ID AND Table2.Tip = 2) as Tarih2
      FROM 
      	`dummy` AS Table1
      GROUP 
      	BY
          	ID

      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 🙂

  4. Abdurrahman dedi ki:

    Hocam iyi calismalar, yukarıdaki örneği sql compact ta nasıl yazmam gerekiyor.
    For xml patch sql compacat ta desteklemiyor yasa yapamadım.

  5. ibrahim dedi ki:

    Hocam iyi günler. Muhteşem paylaşımlarınız için teşekkür ederim öncelikle

    bir konuda yardımınızı isteyecektim.

    Bir veri tabanı oluşturuyorum.

    Demirbaş Programı gibi

    Sahıs/lar ve onlara ait materyaller var.

    1 sahsın
    hem laptobu mp3 çaları, hem pc si hemde telefonu var ve bu malzemelerin özellikleri

    ben bunu nasıl oluşturacağımı bilemedim.
    Malzeme Giriş diye Hem veri tabanında hemde kodda.yardım edebilirseniz cok sevinirim.

    ad – soyad – tc
    pc – marka-modeli-seri no-boyut
    pc – marka-modeli-seri no-boyut
    mp3- marka-modeli-seri no-boyut
    cepTel- marka-modeli-seri no-boyut
    KAYDET

    bu sekilde tekbir formda/tekbir tuşla Şahsa ait tüm materyallerin KAYDET VeriTabanına yapmamız mümkün mü hocam.

    • Murat ÖNER dedi ki:

      Merhaba ibrahim,

      Öncelikle değeri görüşün için teşekkür ederim.

      Yapacağın bu uygulama web yada masaüstü için mi onu belirtmemişsin ama sana yardımcı olması adına yapacağım açıklama her iki platform içinde geçerli olacak zaten. Öncelikle 1’e çok bir ilişki durumu söz konusu Person, Customer yada User diye bir tablon olacak ben User olduğunu varsayıyorum her bir kişi için birden fazla cihaz durumu söz konusu olduğundan UserDevices diye bir tablon olur ve bunun içinde User tablosu için ForeignKey ilişkisi kurulmuş UserId adında bir kolonun olur böylelikle 1’e çok ilişki durumunu tablo tarafında oluşturabilirsin.

      Arayüz tarafında bir’e çok ilişki için bir kullanıcıya kaç tane cihaz ekleneceği bilinmediğinden generic bir yapı kurman gerekecej giriş nesneleri generic olarak eklenip çıkarılabilecek değerler yine dinamik biçimde alınarak veritabanına insert işleminin gerçekleştirilmesi sağlanacak. İş yoğunluğum açısından örnek yapabilmem mümkün olmadı ama takıldığın yerlerde yardımcı olmaya çalışırım.

Bir Cevap Yazın