ÇÖZÜLDÜ PDO üyeler arası özel (PM) mesajlaşma konusunda yardım

sem10line

LogoMerkezi.com
Moderatör
T.C. Onaylı
Katılım
9 Ara 2020
Mesajlar
374
Tepkime puanı
334
Puanları
93
Yaş
32
Konum
Üsküdar/İstanbul
Web sitesi
www.logomerkezi.com
Merhaba arkadaşlar,
@tasarimcidayi ve @cihatmacit 'in 8 ay kadar önce youtube kanalı üzerindeki videosunun dakikası itibari ile yapılan muhabbet ile benzer bir çalışmam vardı ve ara vermiştim, bu videoda bu konuşmaya denk gelince şuan pandemi dolayısı ile belli bir süre evde olduğumdan projeme devam edip bitirmek istedim ve bazı yeni eklemeler yapmak istiyorum bunlardan birisi "Üyeler arası mesajlaşma" sistemini yapmak istiyorum. Bazı denemeler sonuçu ile yaptım sayılır fakat şöyle birşey var bir üye ile mesaj edilirken Gelen yada Giden kutusu olarak oluşturduğum bölümde tek üye ile her mesaj tek tek sıralanıyor ben bunu mesela gelen kutusunda Ahmet den gelen mesajları tek Hasandan gelen mesajları tek tutmak istiyorum fakat beceremedim bu konuda yardımcı olacak varsa yardım edebilirmi?

Örnek gelen kutusu Kodları;


HTML:
<table class="table table-striped">
                <thead>
                  <tr>
                    <th scope="col">Mesaj Tarihi</th>
                    <th scope="col">Gönderen</th>
                    <th scope="col">Durum</th>
                    <th scope="col"></th>
                    <th></th>
                  </tr>
                </thead>
                <tbody>

                  <?php

                   $mesajsor=$db->prepare("SELECT mesaj.*,uyeler.* FROM mesaj INNER JOIN uyeler ON mesaj.kullanici_gon=uyeler.kullanici_id where mesaj.kullanici_gel=:id order by mesaj_okunma,mesaj_zaman DESC");
                  $mesajsor->execute(array(

                    'id' => $_SESSION['userkullanici_id']

                  ));

                  $say=0;

                  while($mesajcek=$mesajsor->fetch(PDO::FETCH_ASSOC)) { $say++;

                   $kullanici_gon=$mesajcek['kullanici_gon'];
                    ?>

                    <?php
                $tarih = $mesajcek['mesaj_zaman'];
                $tarih2 = date("d F Y H:i",strtotime($tarih));
                $ing_aylar = array("January","February","March","May","April","June","July","August","September","October","November","December");
                $tr_aylar = array("OCAK","ŞUBAT","MART","NİSAN","MAYIS","HAZİRAN","TEMMUZ","AĞUSTOS","EYLÜL","EKİM","KASIM","ARALIK");
                $tarih2 = str_replace($ing_aylar,$tr_aylar,$tarih2);

                ?>

                  <tr>
                    <td><?php echo $tarih2 ?></td>
                    <td><?php echo $mesajcek['uye_adi'] ?></td>
                    <td>

                      <?php

                      if ($mesajcek['mesaj_okunma']==1) {?>

                      <i style="color:green" class="fas fa-check-double" aria-hidden="true">

                        <?php } else {?>

                           <i class="fas fa-check" aria-hidden="true">
                       <?php }
                        ?>

                      </td>
                      <td><a href="mesaj-detay.php?mesaj_id=<?php echo $mesajcek['mesaj_id'] ?>&kullanici_gon=<?php echo $mesajcek['kullanici_gon'] ?>"><button class="btn btn-primary btn-xs">Mesajı Oku</button></a></td>

                      <td><a onclick="return confirm('Bu mesajı silmek istiyormusunuz? \n İşlem geri alınamaz...')" href="nedmin/netting/kullanici.php?gelenmesajsil=tamam&mesaj_id=<?php echo $mesajcek['mesaj_id'] ?>"><button class="btn btn-danger btn-xs">Sil</button></a></td>

                    </tr>

                    <?php } ?>

                  </tbody>
                </table>
 

arcface

Âyinesi iştir kişinin lafa bakılmaz
Kayıtlı Kullanıcı
Katılım
25 Eyl 2020
Mesajlar
216
Tepkime puanı
162
Puanları
48
Konum
istanbul
Web sitesi
www.arcface.net
Açıklaman karışık olmuş sorunu anlayamıyorum.

Fakat bir kaç iyileştirme söyleceğimöncesinde gelen giden diye ayırmak yerine textbox diye tablo açıp type diye bir sütun oluşturup 1 ve 0 olarak gelen ve giden şeklinde kullanabilirsin.

Sorunu anlayamadığım için yorumlama olarak bir cevap vericem soru da şunu mu sormak istiyorsun listelerken

Ahmet: Selam
Mehmet: Selam
Ahmet: Nasılsın

Gibi sıralı alamıyorsun bunun yerine

Ahmet:Selam
Ahmet Nasılsın
Mehmet Selam

şeklinde mi alıyorum demek istiyorsun?

Onun sebebi mesaj_okunma olabilir ona öncelik tanımışsın order by alanında onun yerine sadece order by mesaj_zaman DESC yazman yeterli olacaktır.
 

arcface

Âyinesi iştir kişinin lafa bakılmaz
Kayıtlı Kullanıcı
Katılım
25 Eyl 2020
Mesajlar
216
Tepkime puanı
162
Puanları
48
Konum
istanbul
Web sitesi
www.arcface.net
Ayrıca mesaj_zaman DESC demen gereksiz olmuş zaten sondan başa doğru listeliyorsun bunu yaparak yani bunun yerine mesaj_id DESC demen yeterli olur aynı şey farkı yok son eklenen mesaj zaten son eklenen id oluyor
 

sem10line

LogoMerkezi.com
Moderatör
T.C. Onaylı
Katılım
9 Ara 2020
Mesajlar
374
Tepkime puanı
334
Puanları
93
Yaş
32
Konum
Üsküdar/İstanbul
Web sitesi
www.logomerkezi.com
@arcface hocam bilgilendirme için teşekkür ederim kendimi ifade edemedim için kusuruma bakmayın benim demek istediğim şu oluşturdugum mesaj kutusunda bu kodlar ile resimdeki gibi sonuç alıyorum
Adsız.png

benim istediğim böyle değilde tek kullanıcı yazsın yazsın içeriğine mesaj oku dediğimde o kullanıcı ile olan tüm mesajları göstersin giden kutusunda ise cevaplanmamış yazılan mesajlar gözüksün istiyorum.
 

arcface

Âyinesi iştir kişinin lafa bakılmaz
Kayıtlı Kullanıcı
Katılım
25 Eyl 2020
Mesajlar
216
Tepkime puanı
162
Puanları
48
Konum
istanbul
Web sitesi
www.arcface.net
o zaman gruplama yapman gerekiyor Group by kullanici_gon olarak sql koduna ekle o zaman aynı kullanıcıya ait mesajları gruplamış olursun buda sana her kullancıyı tek bir kişi olarak sunar ayrıca gönderen silinmiş bir kullanıcı olabilir bu yüzden INNER JOIN yerine LEFT JOIN kullanırsan kullanıcı silinmiş olsa bile sana o iletileri de sunacaktır.
 

sem10line

LogoMerkezi.com
Moderatör
T.C. Onaylı
Katılım
9 Ara 2020
Mesajlar
374
Tepkime puanı
334
Puanları
93
Yaş
32
Konum
Üsküdar/İstanbul
Web sitesi
www.logomerkezi.com
o zaman gruplama yapman gerekiyor Group by kullanici_gon olarak sql koduna ekle o zaman aynı kullanıcıya ait mesajları gruplamış olursun buda sana her kullancıyı tek bir kişi olarak sunar ayrıca gönderen silinmiş bir kullanıcı olabilir bu yüzden INNER JOIN yerine LEFT JOIN kullanırsan kullanıcı silinmiş olsa bile sana o iletileri de sunacaktır.
yani böyle yaparsam sonuç alırmıyım doğrumu yaptım bilmiyorum ama

Kod:
$mesajsor=$db->prepare("SELECT mesaj.*,uyeler.* FROM mesaj LEFT JOIN uyeler ON mesaj.kullanici_gon=uyeler.kullanici_id where mesaj.kullanici_gel=:id group by kullanici_gon,mesaj_okunma,mesaj_zaman DESC
 

arcface

Âyinesi iştir kişinin lafa bakılmaz
Kayıtlı Kullanıcı
Katılım
25 Eyl 2020
Mesajlar
216
Tepkime puanı
162
Puanları
48
Konum
istanbul
Web sitesi
www.arcface.net
Kod:
$mesajsor=$db->prepare("
SELECT mesaj.*,uyeler.* FROM mesaj
LEFT JOIN uyeler ON mesaj.kullanici_gon=uyeler.kullanici_id
where mesaj.kullanici_gel=:id
GROUP BY mesaj.kullanici_gon
ORDER BY mesaj_zaman DESC");

Şeklinde yapacaksın
 

sem10line

LogoMerkezi.com
Moderatör
T.C. Onaylı
Katılım
9 Ara 2020
Mesajlar
374
Tepkime puanı
334
Puanları
93
Yaş
32
Konum
Üsküdar/İstanbul
Web sitesi
www.logomerkezi.com
Kod:
$mesajsor=$db->prepare("
SELECT mesaj.*,uyeler.* FROM mesaj
LEFT JOIN uyeler ON mesaj.kullanici_gon=uyeler.kullanici_id
where mesaj.kullanici_gel=:id
GROUP BY mesaj.kullanici_gon
ORDER BY mesaj_zaman DESC");

Şeklinde yapacaksın
Hocam verdiğiniz kodu yazdım fakat sıralama alamadım sebebi ne olabilir gelen kutusuna girdiğimde boş çıkıyor
 

sem10line

LogoMerkezi.com
Moderatör
T.C. Onaylı
Katılım
9 Ara 2020
Mesajlar
374
Tepkime puanı
334
Puanları
93
Yaş
32
Konum
Üsküdar/İstanbul
Web sitesi
www.logomerkezi.com
PHP:
 $mesajsor=$db->prepare("
SELECT mesaj.*,uyeler.* FROM mesaj
LEFT JOIN uyeler ON mesaj.kullanici_gon=uyeler.kullanici_id
where mesaj.kullanici_gel=:id and mesaj.mesaj_id=:mesaj_id
ORDER BY mesaj_zaman DESC
GROUP BY mesaj.kullanici_gon");

                  $mesajsor->execute(array(

                    'id' => $_SESSION['userkullanici_id']

                  ));

sizin verdiğiniz kodda bendeki eksik olanı eklesem nolur dedim ve
Kod:
and mesaj.mesaj_id=:mesaj_id
kodunu ekledim )); den hata veriyor
 
5,690Konular
16,885Mesajlar
9,803Kullanıcılar
byulkucuSon üye
Üst