สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด

สอบถามเรื่อง ให้ขึ้น new ถ้ายังไม่ได้เปิดดูรายละเอียด
เมื่อมีการเปิดดูรายละเอียดข้อมูล ให้ทำการ อัพเดท id ผู้เปิดดูเข้าไปเพื่อเช็คการเปิดดู แต่ติดปัญหาคือ ถ้ามีการเปิดดู คนที่ 2 เมื่อมีการอัพเดทจะทับกับ id ผู้เปิดดูก่อนทำให้เช็คการแจ้งแตือนไม่ได้ครับ ผมอยากทราบแนวทางการอัพเดท ที่ยังคงข้อมูลเดิมไว้ และลงในรูปแบบ string เช่น คนแรก id 1 คนที่ 2 id 2 เมื่ออัพเดทแล้วให้อยู่ในรูปแบบ 1,2 ไปเรื่อยๆครับเมื่อมีการการเข้ามาดูครับ 
โค๊ดอัพเดท id คนเปิดดูครับ
 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);
      }
และอยากทราบแนวทางการเช็คการแจ้งเตือน ข้อมูลที่อยู่ในรูปแบบ string ด้วยครับ 
โค๊ดเช็คการแจ้งเตือนครับ

<?php if ($rs['user_v']!=$_SESSION['user_id']){ ?> <span class="label label-danger">New</span><?php } ?>




Nakorn 11-04-2017 18:37:17

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
แนะนำไม่ถูกเหมือนกัน น่าจะขึ้นกับเงื่อนไข 
ถ้าไม่ได้ต้องการเก็บ user_id ที่ดูทั้งหมดไว้ใช้งาน
ให้ใช้เป็นสร้างฟิลด์เข้ามาอีกอัน คือเก็บคนที่ดูก่อนหน้า กับคนที่ดูล่าสุด
สมมติใช้เป็น user_v_prev กับ user_v_now 
ฟิลด์ทั้งสองตัวนี้ ถ้ายังไม่มีใครเปิดเข้าไปดูค่าเริ่มต้นจะเป็น 0 
 
พอกดเข้าไปก็ใช้คำสั่ง SQL 
 
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 คนละคนเปิดดู
แต่ถ้าเป็นคนเดิมเปิดเข้าไปดูซ้ำ ก็จะไม่มีผลอะไร เพราะค่าได้อัพเดทไปแล้ว 
ค่าจะอัพเดทใหม่อีกทีเมื่อคนใหม่เข้ามาเปิดดูและค่าเปลี่ยนแปลง
 
ส่วนถ้าจะเช็คแค่การแจ้งเตือนว่า คนที่ใช้อยู่ตอนนี้ ไม่ใช่คนที่เปิดล่าสุด ก็ใช้รูปแบบเดิมได้
 
<?php if ($rs['user_v_now']!=$_SESSION['user_id']){ ?> <span class="label label-danger">New</span><?php } ?>


ninenik 12-04-2017
 ความคิดเห็นที่ 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 ด้วยครับ 



nakorn 12-04-2017 09:51
 ความคิดเห็นที่ 3
ลองใช้คำสั่งนี้ในการอัพเดทค่า
 
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
 
 
หน้าลิสแสดงรายการ ตอนคิวรี่มาแสดง ก็ให้เพิ่ม คำสั่งที่หาว่า เคยเปิดหรือยังเข้าไป
 
เช่น
 
SELECT
doc_id,
FIND_IN_SET('".$_SESSION['user_id']."',user_v) as read
FROM tb_doc
 
แล้วเวลาเช็คแจ้งเตือน ก็ประมาณนี้
 
<?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
 
<?php if ($rs['read']==0){ ?> <span class="label label-danger">New</span><?php } ?>


ninenik 12-04-2017
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ