ต้องการให้กระทูล่าสุดที่มีการ update ขึ้นมาเป็นข้อแรกต้องทำยังไง
คือตอนนี้ผมสามารถทำให้กระทู้ล่าสุดขึ้นมาเป็นข้อแรกได้ แต่ไม่รู้จะทำยังไงให้กระทู้ล่าสุดที่มีคนมาตอบขึ้นมาเป็นข้อแรกด้วยอ่ะครับ
เพราะกระทู้ล่าสุดที่ขึ้นมาเราทำเพียง
$sql = "select * from webboard_question order by q_id desc";
มันก็ขึ้นมาแล้ว ถ้าต้องการให้กระทู้ล่สุดที่มีการตอบขึ้นมาด้วยต้องทำยังไงมั่งครับ
เพราะกระทู้ล่าสุดที่ขึ้นมาเราทำเพียง
$sql = "select * from webboard_question order by q_id desc";
มันก็ขึ้นมาแล้ว ถ้าต้องการให้กระทู้ล่สุดที่มีการตอบขึ้นมาด้วยต้องทำยังไงมั่งครับ
2. เพิ่มข้อมูลบางอย่างลงในตารางคำถาม
2.1 เพิ่มฟิลด์ reply_date สำหรับเก็บข้อมูลคำตอบล่าสุดที่มีการตอบ
2.2 เพิ่มฟิลด์ reply_id สำหรับเก็บข้อมูล id ของคำตอบล่าสุด เอาไว้อ้างอิง
2.3 เวลามีการตอบคำถาม ให้อัปเดท 2 ฟิลด์นนี้ ด้วยข้อมูลจากตารางคำตอบล่าสุดที่เิพื่งตอบ
วิธีการ query เอามาจาก GCMS
SELECT *
FROM webboard_q
WHERE create_date>='$valid_date' OR reply_date>='$valid_date'
ORDER BY create_date DESC
$valid_date ก็คือ จำนวนวันที่นับถอยหลังไป กี่วัน เพื่อที่จะแสดงเครื่องหมายอัปเดทของกระทู้นี่
เนื่องจากโดยปกติ ผมจะเก็บวันที่ในรูป mktime ทำให้การคำนวณวันที่ค่อนข้างง่าย เช่น
$valid_date = $mmktime - (3600 * 24 * 3);
เลข 3 คือ จำนวนวัน 3 วันที่นับถอยหลังไปเพื่อติดกระทู้ใหม่
$mmktime คือ เวลาปัจจุบัน ในรูป mktime
ฐานข้อมูลผมแบ่งเป็น 2 ฐานครับคือคำถามกับคำตอบ
ฐานข้อมูลคำถาม webboard_question
CREATE TABLE `webboard_question` (
`q_id` int(11) NOT NULL auto_increment,
`q_topic` varchar(100) NOT NULL,
`q_detail` text NOT NULL,
`q_name` varchar(50) NOT NULL,
`q_date` varchar(30) NOT NULL,
`q_ip` varchar(255) NOT NULL default '',
`q_view` int(11) NOT NULL default '0',
`q_reply` int(11) NOT NULL default '0',
PRIMARY KEY (`q_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=50 ;
ฐานข้อมูลคำตอบ webboard_answer
CREATE TABLE `webboard_answer` (
`a_id` int(11) NOT NULL auto_increment,
`a_detail` text NOT NULL,
`a_name` varchar(50) NOT NULL,
`a_date` varchar(30) NOT NULL,
`a_ip` varchar(255) NOT NULL default '',
`q_id` int(11) NOT NULL default '0',
PRIMARY KEY (`a_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
เป็นแบบนี้ครับ
ข้อมูลวันที่ ควรเก็บเป็น ชนิด date เนื่องจาก จะสามารถนำมาคำนวณได้ หรือเก็บเป็นรูปตัวเลข mmktime แบบที่ผมใช้ก้ได้
ถ้าจะทำตามข้อมูลด้านบน คุณต้อง
1.query ข้อมูลจากตารางคำตอบ ตามวันที่ต้องการ (เก็บข้อมูลเป็น varchar จะคำนวณไงหว่า ?) โดยใช้คำสั่ง GROUP BY กับ q_id เพื่อให้ผลลัท์ มีแต่ q_id ที่ไม่ซ้ำกัน
2. นำ q_id ที่ได้ไป query กับตารางคำถาม เอเลือกข้อมูลคำถามออกมา
3. query เอา ข้อมูลใหม่ของตารางคำถามตามปกติ
4. เอาข้อมูล ที่ได้ตาม 2 และ 3 มารวมกันและตัด id ซ้ำทิ้ง
5. แสดงผล
ยุ่งมั้ย ?....
ผมแนะนำให้ปรับปรุงตารางตามที่ผมอธิบายไป จะง่ายกว่า ตัวอย่างเต็มๆ ของวิธีนี้ ให้ดูที่เว็บบอร์ดของ GCMS
varchar แล้วประกาศตัวแปล $q_date = date("j - n - Y"); แล้ว ใส่
<input name="q_date" type="hidden" id="q_date" value="<? echo "$q_date"; ?> "> เอาอ่ะครับ
แล้วถ้าเก็บข้อมูลแบบ date เราต้องทำยังไง มันถึงเรียง วัน เดือน ปี อ่ะครับ
นั่นแหละครับ ปัญหาของมัน ผมถึงได้ใช้ วันที่ในรูป mktime ครับ ซึ่งจะไม่มีปัญหาในการเซ็ตครับ
จริงๆแล้วคำสั่งจัดฟอร์แมตวันที่ก็มีอยู่ แต่ก็เจอหลาย Server ที่ไม่ยอมให้ใช้ครับ ผมเลยไม่ใช้
ลองศึกษาวันที่ในรูป mktime ดูนะครับ ผมว่ามัน เวอร์คสุด