• 16-05-2019, 05:25:01
    #1
    Merhaba,

    Basit bir mesajlaşma sistemi hazırlıyorum. Fakat çözemediğim bir konu var. Şöyle ki ;



    Sayfada farklı üyelerden gelen mesajları listeliyorum. Resimde gördüğünüz gibi ID'si 4 olan kullanıcı mesaj göndermiş. Fakat ben ID'si 4 olan kullanıcının tüm mesajlarını değil sadece en son gönderdiği mesajı göstermek istiyorum.

    Bunun için kullanmam gereken SQL sorgusu nedir ? Ben şuan aşağıdaki sorguyu kullanıyorum ama bu sorgu tüm verileri çekiyor.
    $sorgu = "SELECT *  FROM tblmesaj  WHERE alanId="  .$user["id"].  " order by id desc" ;
    Teşekkür ederim
  • 16-05-2019, 05:26:05
    #2
    Sonuna limit 0,1 ekle
  • 16-05-2019, 05:33:03
    #3
    FurkanK adlı üyeden alıntı: mesajı görüntüle
    Sonuna limit 0,1 ekle
    Hızlı cevabınız için teşekkür ederim. Fakat sistem içinde birden fazla kullanıcı var. Limit 0,1 yaptığım zaman sadece son mesaj ekleniyor.

    Benim yapmak istediğim aynı gönderici id değerine sahip verilerin tekrarlanmasını engellemek.
  • 16-05-2019, 05:34:06
    #4
    Group by araştır
  • 16-05-2019, 05:36:32
    #5
    order dan önce, group by USERCOLUMN ekleyip deneyebilirsin.

    USERCOLUMN : tablonda kullanıcı idsini tuttuğun sütünun adı
  • 17-05-2019, 17:46:01
    #6
    Tablo
    CREATE TABLE Mesajlar (
    ID INT NOT NULL,
    Gonderici VARCHAR(255) NOT NULL,
    Alici VARCHAR(255) NOT NULL,
    Mesaj VARCHAR(255) NOT NULL
    );
    
    INSERT INTO Mesajlar
    VALUES
    (1, 'Ali', 'Mehmet', 'Sa'),
    (2, 'Mehmet', 'Ali', 'As'),
    (3, 'Ali', 'Mehmet', 'Nasılsın'),
    (4, 'Mehmet', 'Ali', 'İyiyim');
    
    INSERT INTO Mesajlar
    VALUES
    (1, 'Ali', 'Hasan', 'Selam'),
    (2, 'Hasan', 'Ali', 'Selam'),
    (3, 'Ali', 'Hasan', 'Naber'),
    (4, 'Hasan', 'Ali', 'İyidir');
    Sorgu
    SELECT *
    FROM Mesajlar
    Where Alici = 'Ali' AND id in (
    select max(id) from Mesajlar group by Gonderici
    )
    Sonuç
    Sorguda zaten Ali diye belirttik. Çıktı da bu şekilde olacaktır..

    Dipnot: Alici, Gonderici yerine AliciId, GondericiId şeklinde değiştirirsiniz..
    Dipnot: Kodda bazı sıkıntılar var. Fakat mantık üzerinden gidin..
  • 17-05-2019, 18:54:59
    #7
    MOmerAlpi adlı üyeden alıntı: mesajı görüntüle
    Tablo
    CREATE TABLE Mesajlar (
    ID INT NOT NULL,
    Gonderici VARCHAR(255) NOT NULL,
    Alici VARCHAR(255) NOT NULL,
    Mesaj VARCHAR(255) NOT NULL
    );
    
    INSERT INTO Mesajlar
    VALUES
    (1, 'Ali', 'Mehmet', 'Sa'),
    (2, 'Mehmet', 'Ali', 'As'),
    (3, 'Ali', 'Mehmet', 'Nasılsın'),
    (4, 'Mehmet', 'Ali', 'İyiyim');
    
    INSERT INTO Mesajlar
    VALUES
    (1, 'Ali', 'Hasan', 'Selam'),
    (2, 'Hasan', 'Ali', 'Selam'),
    (3, 'Ali', 'Hasan', 'Naber'),
    (4, 'Hasan', 'Ali', 'İyidir');
    Sorgu
    SELECT *
    FROM Mesajlar
    Where Alici = 'Ali' AND id in (
    select max(id) from Mesajlar group by Alici
    )
    Sonuç
    Sorguda zaten Ali diye belirttik. Çıktı da bu şekilde olacaktır..

    Dipnot: Alici, Gonderici yerine AliciId, GondericiId şeklinde değiştirirsiniz..
    Elinize, kolunuza sağlık. Sorunumu sayenizde hallettim.