วิธีการดึกข้อมูลโพสต์โดยไม่ให้ มีการ Query Sql ที่มาเกิน ใน phpbb
Posted: 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 ที่ใช้คือ
โดย $event['post_list'] จะดึง post_id เฉาพะที่มีการแสดงในหน้านั้นๆ
ตัวอย่าง คือ ถ้า topic ที่ต้องการมี จำนวนโพสต์ 200 โพสต์ แล้วแบ่งหน้าไว้ที่ 10 โพสต์ต่อหน้า $event['post_list'] จะดึง post_id แค่ 10 โพสต์ที่แสดงหน้านั้นๆ
และจะมีการ Query Sql เพียงแค่ครั่งเดียวเท่านั้น
ตัวอย่างผม การ Query Sql
จากตัวอย่างโพสต์ที่แสดงเพียง 2 โพสต์ต่อหน้า
หรือถ้าหากต้องการต้องดึงข้อมูล user_id ก็สามารถทำได้จาก Event viewtopic_modify_post_data ได้เช่นกัน ดังนี้
แล้วนำตัวแปร $user_id_s ไปใช้ Query Sql ได้ดังนี้ครับ
ทั้งนี้สามารถดู Event phpbb อื่นๆได้จาก ที่นี้
ส่วนขยาย(Extension) จะทำให้ เว็บบอร์ด phpbb มีประสิทธิภาพ การทำงานที่ดีขึ้น โดยสามารถ ปรับเพิ่มเพิ่มแก้ไข้ ในส่วนต่างๆของ เว็บบอร์ด phpbb ได้ตามอิสระ ซึ่งในขั้นตอนพัฒนา ไม่จำเป้นที่จะต้องเข้าไปยุ่งเกี่ยว Code เดิมที่มีอยู่(แต่อาจจะมีบางครั่งที่ต้องเข้าไปแก้ไข้ เพิ่มเติม) นั้นก็ช่วยเราไม่ต้องกังวลกับการผิดพลาดที่อาจจะเกิดขึ้นได้เพราะหาก Code ของ เว็บบอร์ด phpbb เกิดความผิดพลาดก้อาจจะกระทบต่อการทำงานส่วนอื่นๆ ด้วย โดยการสร้าง Extension นั้นก็มีวิธีการพัฒนาที่ไม่ซับซ่อนมาก เพียงแต่จะมีเพียงการทำงานที่จะต้องเป็นไปตามที่เราต้องการเท่านั้น ที่จะยากนิดหน่อย
- ซึ่งทั้งนี้ การที่จะพัฒนา Extension เพื่อนำมาใช้งานนั้นบางครั่งอาจจะต้องคำนึกถึงการ Query Sql ข้อมูลจากฐานข้อมูลเพื่อนำมาใช้พัฒนา Extension ด้วยว่า Query Sql ในแต่ละครั่งนั้น ควรจะไม่ทำให้เพื่อภาระต้องผลการประมมวลผลลัพธ์ ของ phpbb พื้นฐานที่มากเกินไป โดยเฉพาะการ Query Sql ข้อมูลแบบวนลูปตามจำนวนโพสต์
วันนี้ผมจงจะแนะนำ Event ที่ช่วยให้สามารถดึงข้อมูลโพสต์ โดยที่ไม่ต้องวนรับค่า post_id หลายๆครับ
โดย Event ที่ใช้คือ
โดย Event viewtopic_modify_post_data สามารถดึงค่า post_id ของ topic ได้จากวิธีการเขียนโคด ดังนี้viewtopic_modify_post_data
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);
ตัวอย่าง คือ ถ้า 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 โพสต์ต่อหน้า
หรือถ้าหากต้องการต้องดึงข้อมูล user_id ก็สามารถทำได้จาก Event viewtopic_modify_post_data ได้เช่นกัน ดังนี้
Code: Select all
$user_id_s = array_keys($event['user_cache']);
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);