اذهب إلى المحتوى

السؤال

نشر (معدل)

هذا الكود يعرض الرسائل من قاعدة البيانات للرسائل الواردة للعضو - لكنه يعرض اقدم رسالة للعضو

كيف يمكن عرض احدث رسالة بدلا من اقدم رسالة

<?php

$stmt = $db->prepare('select * FROM messages WHERE recipient_id = ?  GROUP BY sender_id ORDER BY id DESC');
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc())
{
echo '<div class="div_messages"><a href="index.php?to='.$row['sender_id'].'"> تم استلام رسالة من  <br />'.$row['sender_name'].'<br />'.$row['date'].'</a></div>' ;
}
$stmt->close();
?> 

 

Caسسسpture.PNG

تم التعديل في بواسطة Hamada Ahmed

Recommended Posts

  • 0
نشر

في جملة SQL يبدو أنه يتم ترتريب الرسائل من خلال العمود id، بدلًا من ذلك يجب أن يكون الترتيب بناءًا على الوقت (أي من خلال العمود date)

<?php
$stmt = $db->prepare('select * FROM messages WHERE recipient_id = ?  GROUP BY sender_id ORDER BY date DESC');
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
  echo '<div class="div_messages"><a href="index.php?to='.$row['sender_id'].'"> تم استلام رسالة من  <br />'.$row['sender_name'].'<br />'.$row['date'].'</a></div>' ;
}
$stmt->close();

كما يمكنك أن تقوم بعكس ترتيب الرسائل تنازليًا أو تصاعديًا من خلال التبديل بين (DESC - ASC) في نهاية جملة SQL

بالتوفيق.

  • 0
نشر
بتاريخ 45 دقائق مضت قال سامح أشرف:

في جملة SQL يبدو أنه يتم ترتريب الرسائل من خلال العمود id، بدلًا من ذلك يجب أن يكون الترتيب بناءًا على الوقت (أي من خلال العمود date)


<?php
$stmt = $db->prepare('select * FROM messages WHERE recipient_id = ?  GROUP BY sender_id ORDER BY date DESC');
$stmt->bind_param('i', $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
  echo '<div class="div_messages"><a href="index.php?to='.$row['sender_id'].'"> تم استلام رسالة من  <br />'.$row['sender_name'].'<br />'.$row['date'].'</a></div>' ;
}
$stmt->close();

كما يمكنك أن تقوم بعكس ترتيب الرسائل تنازليًا أو تصاعديًا من خلال التبديل بين (DESC - ASC) في نهاية جملة SQL

بالتوفيق.

يتم ترتيب الرسائل من الاحدث الى الاقدم فى القائمة المنسدلة - المشكلة فى عرض احدث رسالة للعضو فى عناصر القائمة - استخدام date يعطى نفس النتائج

  • 1
نشر
بتاريخ 14 ساعات قال Hamada Ahmed:

يتم ترتيب الرسائل من الاحدث الى الاقدم فى القائمة المنسدلة - المشكلة فى عرض احدث رسالة للعضو فى عناصر القائمة - استخدام date يعطى نفس النتائج

أعتقد أن سبب المشكلة هو أن GROUB BY تقوم بأخذ أول صف فقط وبعد ذلك تتجاهل باقي الصفوف التي لها نفس قيمة sender_id، لذلك يمكنك تجربة جملة SQL التالية:

SELECT * FROM messages WHERE recipient_id = ? AND sender_id IN (SELECT DISTINCT sender_id FROM messages)

الجملة السابقة ستقوم أولًا بجلب الصفوف غير المكررة في العمود sender_id (أي أن قيم العمود sender_id لن تتكرر)، ثم تقوم بجلب أحدث رسالة فقط لكل مُرسِل sender.

  • 0
نشر
بتاريخ 4 ساعات قال سامح أشرف:

أعتقد أن سبب المشكلة هو أن GROUB BY تقوم بأخذ أول صف فقط وبعد ذلك تتجاهل باقي الصفوف التي لها نفس قيمة sender_id، لذلك يمكنك تجربة جملة SQL التالية:


SELECT * FROM messages WHERE recipient_id = ? AND sender_id IN (SELECT DISTINCT sender_id FROM messages)

الجملة السابقة ستقوم أولًا بجلب الصفوف غير المكررة في العمود sender_id (أي أن قيم العمود sender_id لن تتكرر)، ثم تقوم بجلب أحدث رسالة فقط لكل مُرسِل sender.

استخدام هذا الكود يكرر جميع الرسائل الواردة من العضو

يمكنك تجريب ذلك

 

messages.rar

  • 0
نشر

المشكلة أننا نستخدم تابع التجميع قبل تابع الترتيب ما يؤدي لجلب رسالة واحدة من المرسل المحدد و من ثم لا يفيدنا الترتيب

لأننا للتو لدينا أقدم رسالة من كل مرسل فالترتيب هنا سيكون حسب أحدث رسالة من مرسلين مختلفين و ليس من نفس المرسل.

لذلك يجب جلب الرسائل للمستقبل المحدد و ترتيبها و من ثم تجميعها كالتالي:

select * from 

(select * FROM messages 
		WHERE recipient_id = 1 ORDER BY id DESC) as T

GROUP BY T.sender_id

استبدل الرقم 1 بالمعرف الخاص بالمستقبل

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...