วิธีการดึกข้อมูลโพสต์โดยไม่ให้ มีการ Query Sql ที่มาเกิน ใน phpbb

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderators: mindphp, ผู้ดูแลกระดาน

Post Reply
User avatar
Ittichai_chupol
PHP VIP Members
PHP VIP Members
Posts: 2992
Joined: 19/09/2018 10:33 am

วิธีการดึกข้อมูลโพสต์โดยไม่ให้ มีการ Query Sql ที่มาเกิน ใน phpbb

Post by Ittichai_chupol » 16/08/2019 6:07 pm

- เว็บบอร์ด phpbb นั้นเป็บเว็บบอร์ดที่มี code และ ฟั่งชั่น ตางๆ ที่สนับสนุนการใช้งาน ในส่วนต่างๆของเว็บ มาให้เป้นพื้นฐาน ตั้งแต่แรกติดตั้งอยู่ นั้นจึงทำให้ผุ้พัฒนา ไม่ต้องเสียเวลากับการที่จะต้องสร้าง ส่วนต่างขึ้นมาเองทั้งหมด เพียงแค่ปรับปรุง หรือ เสริมเพียงเเค่บางส่วนเข้าไปเท่านั้น ก็ทำให้เว็บบอร์ด สามารถทำงาน ตามที่เราต้องการ โดยวิธีการที่เราจะทำให้เว็บบอร์ด phpbb สามารถทำในส่วนที่ไม่ได้มีมากับตอนติดตั้งครั่งแรกนั้น คือการส่ร้าง ส่วนขยาย(Extension)

ส่วนขยาย(Extension) จะทำให้ เว็บบอร์ด phpbb มีประสิทธิภาพ การทำงานที่ดีขึ้น โดยสามารถ ปรับเพิ่มเพิ่มแก้ไข้ ในส่วนต่างๆของ เว็บบอร์ด phpbb ได้ตามอิสระ ซึ่งในขั้นตอนพัฒนา ไม่จำเป้นที่จะต้องเข้าไปยุ่งเกี่ยว Code เดิมที่มีอยู่(แต่อาจจะมีบางครั่งที่ต้องเข้าไปแก้ไข้ เพิ่มเติม) นั้นก็ช่วยเราไม่ต้องกังวลกับการผิดพลาดที่อาจจะเกิดขึ้นได้เพราะหาก Code ของ เว็บบอร์ด phpbb เกิดความผิดพลาดก้อาจจะกระทบต่อการทำงานส่วนอื่นๆ ด้วย โดยการสร้าง Extension นั้นก็มีวิธีการพัฒนาที่ไม่ซับซ่อนมาก เพียงแต่จะมีเพียงการทำงานที่จะต้องเป็นไปตามที่เราต้องการเท่านั้น ที่จะยากนิดหน่อย

- ซึ่งทั้งนี้ การที่จะพัฒนา Extension เพื่อนำมาใช้งานนั้นบางครั่งอาจจะต้องคำนึกถึงการ Query Sql ข้อมูลจากฐานข้อมูลเพื่อนำมาใช้พัฒนา Extension ด้วยว่า Query Sql ในแต่ละครั่งนั้น ควรจะไม่ทำให้เพื่อภาระต้องผลการประมมวลผลลัพธ์ ของ phpbb พื้นฐานที่มากเกินไป โดยเฉพาะการ Query Sql ข้อมูลแบบวนลูปตามจำนวนโพสต์


วันนี้ผมจงจะแนะนำ Event ที่ช่วยให้สามารถดึงข้อมูลโพสต์ โดยที่ไม่ต้องวนรับค่า post_id หลายๆครับ

โดย Event ที่ใช้คือ
viewtopic_modify_post_data
โดย Event viewtopic_modify_post_data สามารถดึงค่า post_id ของ topic ได้จากวิธีการเขียนโคด ดังนี้

Code: Select all

   
   sql = ' SELECT *
		FROM ' . $this->table_prefix . 'm_like' . $numlike . '
		WHERE post_id IN ' . ' (' . implode(',', $event['post_list']) . ')' . ' AND staus_like = 1';
        $result = $this->db->sql_query($sql);
        
        
โดย $event['post_list'] จะดึง post_id เฉาพะที่มีการแสดงในหน้านั้นๆ
ตัวอย่าง คือ ถ้า topic ที่ต้องการมี จำนวนโพสต์ 200 โพสต์ แล้วแบ่งหน้าไว้ที่ 10 โพสต์ต่อหน้า $event['post_list'] จะดึง post_id แค่ 10 โพสต์ที่แสดงหน้านั้นๆ
และจะมีการ Query Sql เพียงแค่ครั่งเดียวเท่านั้น

ตัวอย่างผม การ Query Sql

Code: Select all

SELECT * FROM phpbb_m_like2 WHERE post_id IN (68,69) AND staus_like = 1

จากตัวอย่างโพสต์ที่แสดงเพียง 2 โพสต์ต่อหน้า
Selection_999(1926).png

หรือถ้าหากต้องการต้องดึงข้อมูล user_id ก็สามารถทำได้จาก Event viewtopic_modify_post_data ได้เช่นกัน ดังนี้

Code: Select all

 $user_id_s = array_keys($event['user_cache']);
แล้วนำตัวแปร $user_id_s ไปใช้ Query Sql ได้ดังนี้ครับ

Code: Select all

  $sql = ' SELECT *
		FROM ' . $this->table_prefix . 'm_like' . $numlike . '
		WHERE post_id IN ' . ' (' . implode(',', $event['post_list']) . ')' . ' AND staus_like = 1';
        $result = $this->db->sql_query($sql);
ทั้งนี้สามารถดู Event phpbb อื่นๆได้จาก ที่นี้

Post Reply

Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 22 guests