สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด
สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด
เมื่อมีการเปิดดูรายละเอียดข้อมูล ให้ทำการ อัพเดท id ผู้เปิดดูเข้าไปเพื่อเช็คการเปิดดู แต่ติดปัญหาคือ ถ้ามีการเปิดดู คนที่ 2 เมื่อมีการอัพเดทจะทับกับ id ผู้เปิดดูก่อนทำให้เช็คการแจ้งแตือนไม่ได้ครับ ผมอยากทราบแนวทางการอัพเดท ที่ยังคงข้อมูลเดิมไว้ และลงในรูปแบบ string เช่น คนแรก id 1 คนที่ 2 id 2 เมื่ออัพเดทแล้วให้อยู่ในรูปแบบ 1,2 ไปเรื่อยๆครับเมื่อมีการการเข้ามาดูครับ
โค๊ดอัพเดท id คนเปิดดูครับ
และอยากทราบแนวทางการเช็คการแจ้งเตือน ข้อมูลที่อยู่ในรูปแบบ string ด้วยครับ
โค๊ดเช็คการแจ้งเตือนครับ
<?php if ($rs['user_v']!=$_SESSION['user_id']){ ?> <span class="label label-danger">New</span><?php } ?>
โค๊ดอัพเดท id คนเปิดดูครับ
1 2 3 4 5 6 | if ( $rs [ 'user_v' ]!= $_SESSION [ 'user_id' ]){ $es ="UPDATE tbl_document SET user_v= '".$_SESSION[' user_id ']."' WHERE doc_id= '".$_GET[' e_doc_id ']."' " ; $objQuery = $mysqli ->query( $es ); } |
โค๊ดเช็คการแจ้งเตือนครับ
<?php if ($rs['user_v']!=$_SESSION['user_id']){ ?> <span class="label label-danger">New</span><?php } ?>

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ความคิดเห็นที่
1
แนะนำไม่ถูกเหมือนกัน น่าจะขึ้นกับเงื่อนไข
ถ้าไม่ได้ต้องการเก็บ user_id ที่ดูทั้งหมดไว้ใช้งาน
ให้ใช้เป็นสร้างฟิลด์เข้ามาอีกอัน คือเก็บคนที่ดูก่อนหน้า กับคนที่ดูล่าสุด
สมมติใช้เป็น user_v_prev กับ user_v_now
ฟิลด์ทั้งสองตัวนี้ ถ้ายังไม่มีใครเปิดเข้าไปดูค่าเริ่มต้นจะเป็น 0
พอกดเข้าไปก็ใช้คำสั่ง SQL
1 2 3 4 5 6 7 | UPDATE tbl_doc SET user_v_prev=user_v_now , user_v_now= '".$_SESSION[' user_id ']."' WHERE doc_id= '".$_GET[' e_doc_id ']."' AND (user_v_now!= '".$_SESSION[' user_id ']."' AND user_v_prev!= '".$_SESSION[' user_id ']."' ) OR (user_v_now!= '".$_SESSION[' user_id ']."' AND user_v_prev=0) |
ค่าของ user_v_prev กับ user_v_now ก็จะสลับไปมา ถ้าเป็น user คนละคนเปิดดู
แต่ถ้าเป็นคนเดิมเปิดเข้าไปดูซ้ำ ก็จะไม่มีผลอะไร เพราะค่าได้อัพเดทไปแล้ว
ค่าจะอัพเดทใหม่อีกทีเมื่อคนใหม่เข้ามาเปิดดูและค่าเปลี่ยนแปลง
ส่วนถ้าจะเช็คแค่การแจ้งเตือนว่า คนที่ใช้อยู่ตอนนี้ ไม่ใช่คนที่เปิดล่าสุด ก็ใช้รูปแบบเดิมได้
1 | <?php if ( $rs [ 'user_v_now' ]!= $_SESSION [ 'user_id' ]){ ?> <span class = "label label-danger" >New</span><?php } ?> |

ความคิดเห็นที่
2
ผมต้องการเก็บ id_user ที่เปิดดูทั้งหมดไว้ครับ ในระบบมี user มากกว่า 10 คนครับ ถ้า user คนไหนยังไม่เปิดดู ก็จะเห็นเป็น new ตลอดครับ แต่ถ้า user คนไหนเปิดดูแล้วก็จะไม่ขึ้นครับ คล้ายๆกับการเปิดอ่าน email ครับ จึงอยากก็บไว้ในฟิลด์เดียว ในรูปแบบ id_user1,id_user2,id_user3,id_user4,id_user5 ไปเรื่อยๆตามจำนวน user ที่เปิดดูครับ
และอยากทราบแนวทางการเช็ค ข้อมูลที่อยู่ในรูปแบบ id_user1,id_user2,id_user3,id_user4,id_user5 ด้วยครับ

ความคิดเห็นที่
3
ลองใช้คำสั่งนี้ในการอัพเดทค่า
1 2 3 4 5 | UPDATE tbl_doc SET user_v = CONCAT(user_v,IF(user_v!= '' , ',' , '' ), '".$_SESSION[' user_id ']."' ) WHERE doc_id= '".$_GET[' e_doc_id ']."' AND FIND_IN_SET( '".$_SESSION[' user_id ']."' ,user_v)=0 |
หน้าลิสแสดงรายการ ตอนคิวรี่มาแสดง ก็ให้เพิ่ม คำสั่งที่หาว่า เคยเปิดหรือยังเข้าไป
เช่น
1 2 3 4 | SELECT doc_id, FIND_IN_SET( '".$_SESSION[' user_id ']."' ,user_v) as read FROM tb_doc |
แล้วเวลาเช็คแจ้งเตือน ก็ประมาณนี้
1 | <?php if ( $rs [ 'read' ]!=0){ ?> <span class = "label label-danger" >New</span><?php } ?> |
>>> อัพเดท >>> 12-04-2017
------------------------------------------
แก้ไขเป็น if($rs['read']==0){ ถ้ายังไม่เปิดอ่าน ซึ่งหมายถึงยังไม่มี user_id ใน field user_v
1 | <?php if ( $rs [ 'read' ]==0){ ?> <span class = "label label-danger" >New</span><?php } ?> |

ขอบคุณทุกการสนับสนุน
![]()