 |
สอบถามเรื่องการเรียง query ลำดับกระทู้เว็บบอร์ดครับ |
|
 |
|
|
 |
 |
|
ต้องการเรียงกระทู้เว็บบอร์ด โดย ให้มีการเรียงลำดับไล่ตามความสำคัญดังนี้
1. เรียงลำดับจากสถานะ pin (กระทู้ปักหมุด)
2. เรียงลำดับจากวันที่มีคนตอบล่าสุดของกระทู้นั้นๆ หรือ วันที่ตั้งกระทู้ (ให้มีการดันกระทู้ได้)
ผมจึงเขียน query เป็นดังนี้
Code (SQL)
SELECT *,date_format(topic_date,'%d/%m/%Y %H:%i:%s') as postdate,date_format(topic_date,'%d,%m,%Y') as datecal, topic.topic_id as index_key, topic.member_id as mem_id, topic.aId as adm_id
FROM topic
LEFT JOIN reply ON topic.topic_id=reply.topic_id
WHERE topic_type=1
GROUP BY topic.topic_id
ORDER BY topic_pin DESC, coalesce(MAX(reply_date), topic_date) DESC LIMIT 0,50
ปรากฏว่า เรียงลำดับได้ถูกต้อง
แต่...เว็บโหลดข้อมูลช้ามากครับ ประมาณ 7-10 วิเลยทีเดียว คาดว่าน่าจะเป็นปัญหาที่ Left Join ที่ทำให้ช้า เพราะผมลองเปลี่ยน Left Join เป็น Inner Join ดู ปรากฎว่าเร็วขึ้น แต่แสดงผลไม่ถูกต้อง เพราะบางกระทู้ที่ยังไม่มีคนตอบก็จะไม่แสดง
แบบนี้ไม่ทราบว่ามีวิธีเขียน query ยังไงให้มันโหลดข้อมูลได้เร็วมากกว่านี้มั้ยครับ
Tag : PHP, MySQL
|
|
 |
 |
 |
 |
Date :
2015-02-05 19:12:38 |
By :
golf7626 |
View :
1121 |
Reply :
8 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
กำหนด index ของ table ครับ SQL CREATE INDEX
|
 |
 |
 |
 |
Date :
2015-02-05 23:47:07 |
By :
Krungsri |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เริ่มต้นด้วย เพิ่ม field last_post เข้าไปใน ฟีลด์ topic
update ทุกครั้ง ที่มีการ reply เพื่องาน คิวรี่ ตรงนี้โดยเฉพาะ
และ
select เฉพาะ field ที่จำเป็นต้องใช้ อย่าเหมาหมด ด้วย ดาว *
บางงาน ถ้าทำผั่ง client ได้ ส่งไปให้ client ทำ เช่น รูปแบบของวันที่ ใช้ javascript แปลง เป็นวันที่ไทย
Code (SQL)
select ฟีลด์ที่จำเป็น from topic
order by pin desc, last_post desc
limit 50
คำสั่ง update topic.last_post
ีCode (SQL)
update topic
left join (
select max(reply_date) mx , topic_id from reply group by topic_id
) as t on t.topic_id=topic.id
set topic.last_post = coalesce( t.mx, topic.topic_date)
ปล. update topic.last_post ที่แสดงเป็นตัวอย่าง ทำแค่ครัั้งเดียว เมื่อเพิ่ม field last_post นะครับ
ไม่ใช่เอาไป update ทุกครั้งที่ reply นะครับ อึดตึด ไม่รู้ด้วยนะ
|
ประวัติการแก้ไข 2015-02-06 05:04:14 2015-02-06 05:08:00 2015-02-06 05:09:16 2015-02-06 05:09:35 2015-02-06 05:14:14
 |
 |
 |
 |
Date :
2015-02-06 05:03:20 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองทำ INDEX ให้ reply.topic_id
|
 |
 |
 |
 |
Date :
2015-02-06 08:48:23 |
By :
{Cyberman} |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทุกท่านมากครับ
|
 |
 |
 |
 |
Date :
2015-02-06 10:10:15 |
By :
golf7626 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|