|
|
|
ตรวจสอบ mysql เมื่อมีข้อมูลเข้ามาใหม่ ต้องทำยังไงครับ |
|
|
|
|
|
|
|
ถ้าอย่างที่ต้องการน่ะ ต้องทำหลาย query เลยนะ
ขอถามหน่อย ทำไมต้องทำอย่างนั้นน่ะ เพราะจำเป็นต้องทำการ query หลายขั้นตอนขนาดนั้นเลยเหรอ
ถ้าต้องการตรวจสอบค่าอย่าง ใช้วิธีสร้างฟิลด์ขึ้นมาเช็คไม่ได้เหรอ
|
|
|
|
|
Date :
2011-12-31 10:06:12 |
By :
บังเอิญผ่านมาเห็น |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันเป็นขั้นตอนที่คิดไว้อ่ะครับ เพื่อที่จะได้ทำการตรวจสอบขั้นตอนต่อไปได้
|
|
|
|
|
Date :
2011-12-31 15:03:13 |
By :
karurub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ แต่ก็เริ่มไม่ถูก คือว่าผมลองทำทีละ query มันสามารถทำได้ แต่ผมไม่รู้จะทำยังไงให้มันมารวมกันได้ครับ
|
|
|
|
|
Date :
2011-12-31 17:40:30 |
By :
karurub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ยากอย่างที่คิดนะครับ เพราะขั้นตอนที่โจทย์ให้มานั้นไม่เยอะเลย
เนื่องจากโจทย์ต้องการตรวจสอบข้อมูลทุกๆ 3 วินาที เพราะฉะนั้นเทคโนโลยีที่จะนำมาใช้ร่วมก็ควรจะเป็นการทำงานฝั่ง Client ซึ่งก็คือ การใช้ javascript เข้ามาช่วย run script ทุกๆ 3 วินาที (แล้วแต่จะกำหนดครับ)
โดยการเขียน javascript นั้นเพียงเป็นการให้มันทำงานตามเวลาที่กำหนด แล้วใช้ javascript เรียกไฟล์ php
สำหรับไฟล์ php นั้นสามารถเขียนกระบวนงานได้หลายแบบครับ ขึ้นอยู่กับทักษะของแต่ละคนครับ ยกตัวอย่างเช่น
การเขียนแบบไฟล์เดียวจบ โดยมีขั้นตอนประมาณนี้ครับ
1 ตรวจสอบข้อมูลใน table receive ...... ตรงนี้ ขึ้นอยู่กับวิธีตรวจสอบครับ จากโจทย์ไม่ได้บอกไว้ว่าตรวจสอบยังไง เพราะฉะนั้นต้องเขียนวิธีตรวจสอบให้ครอบคลุมกับความต้องการด้วยครับ
2 หลังจากตรวจสอบแล้วก็เอาข้อมูลที่ได้มาใช้ if else เพื่อทำกระบวนงานต่อไป เช่น
Code (PHP)
if ($NewData == false) {
echo "No data update......";
} else {
echo "Some value....."
// ขั้นนี้ก็จะเก็บข้อมูล record ที่ตรวจสอบแล้วเข้าไปเก็บไว้ในตัวแปร ซึ่งจะเก็บแบบใดก็ขึ้นอยู่กับของแต่ละคนครับ ข้อมูลที่เก็บตรงนี้จะเอาไปใช้ในคิวรี่ INSERT ข้างล่างนี้ ($sql1) และสิ่งที่ต้องเก็บข้อมูลเข้าตัวแปรที่สำคัญก็คือ id ของ record ที่เกิดขึ้นใหม่นี้เพื่อนำไปใช้ในคิวรี่ที่ 2 ($sql2)
$sql1 = "INSERT INTO receiveOld VALUES(fieldData1, fieldData2, fieldData3, fieldData4.....)";
//....แล้วก็ excute คิวรี่ $sql1
$sql2 = "DELETE FROM receive WHERE id=.......ตรงนี้คือ id ที่เก็บมาจากขั้นตอนก่อนหน้านี้....";
//....แล้วก็ excute คิวรี่ $sql2
}
...................................................
จากขั้นตอนด้านบน จะมีไฟล์ที่เกี่ยวข้อง 2 ไฟล์คือไฟล์ php หลักที่มี javascript เพื่อใช้ฟังก์ชั่น time interval เพื่อเรียกไฟล์ php อีกไฟล์ขึ้นมาทำงาน โดยไฟล์ php ที่ 2 นี้จะเป็นขั้นตอนการตรวจสอบทั้งหมด (เพราะมันจะทำงานฝั่ง server)
เราสามารถเขียนคำสั่งเพื่อคิวรี่ฐานข้อมูลหลายๆคำสั่งต่อกันได้ครับ โดยคำนึงถึงการทำงานที่ conflict กันเองด้วย เพราะบางครั้งคิวรี่ก่อนหน้ายังทำงานไม่เสร็จอาจทำให้คิวรี่ถัดมาผิดพลาดได้ แต่ถ้าเป็นการ select ข้อมูลที่แยกตารางกันชัดเจนก็ไมน่าจะมีปัญหาครับ เพราะมันจะทำงานได้รวดเร็วมาก พื้นฐานการสร้างฐานข้อมูล และการทำ Normalization ควรจะแน่นหน่อยนะครับถ้าต้องทำงานกับฐานข้อมูลทีมีขนาดใหญ่ๆ
ผมให้คำแนะนำเพื่อเป็นแนวทางนะครับ ถ้าเขียนแล้วติดตรงไหนก็ลองโพสเข้ามาถามละกัน
|
ประวัติการแก้ไข 2011-12-31 21:03:06
|
|
|
|
Date :
2011-12-31 21:02:12 |
By :
Songkram |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบตุณมากครับ
ผมได้ทำแบบนี้ครับ
1 เปิดหน้าเวป ให้มันรีเฟรซตัวเองทุก 3 วินาที โดยไปกำหนดที่ หน้ามันเลย ซึ่งอันนี้สามารถทำได้แล้ว (ที่ให้มันรีเฟรซเพื่อไปตรวจสอบว่ามีข้อมูลมีที่ table receive หรือไม่ เนื่องจาก table นี้ต้องไม่มีข้อมูลถ้าหากมีข้อมูลเข้ามาก็จะเข้ากระบวนการถัดไป)
2 เมื่อมีข้อมูลก็จำทำการ echo "$name"
หลังจากนี้ไม่รู้จะทำไงต่อครับ เริ่ม งงๆ กับตัวเองแระ หุหุ
Code (PHP)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="3">
<title>Untitled Document</title>
</head>
<?
$host="localhost";
$user="root";
$pw="1234";
$dbname="test";
$link=mysql_connect("localhost",$user,$pw);
mysql_select_db($dbname,$link);
mysql_query("SET NAMES UTF8");
$sql = ('select name from receive order by ID asc limit 1');
$objquery=mysql_query($sql);
$fetch=mysql_fetch_array($objquery);
$Id=$fetch[ID];
$Name=$fetch[name];
echo "Id = $Id";
echo "\n";
echo "Name = $Name";
?>
<body>
</body>
</html>
|
|
|
|
|
Date :
2012-01-01 02:35:23 |
By :
karurub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตี 2 กว่าแล้วยังมาโพสได้นี่แสดงว่าไป count down ที่ไหนมาล่ะสิ......
การใช้งาน html refresh page แบบนี้ก็ไม่ผิดอะไรนะครับ แต่ถ้าจะให้ดีและมีความยืดหยุ่นในการตรวจสอบมากขึ้น ผมว่าน่าจะใช้ javascript ดีกว่าครับ ยิ่งตอนนี้กระแส Ajax มีเข้ามามากด้วย ลองเข้าไปดูบทความนี้ดูนะครับ
http://www.goragod.com/knowledge/%E0%B8%9A%E0%B8%97%E0%B8%97%E0%B8%B5%E0%B9%88%205%20Auto%20Refresh%20%E0%B9%80%E0%B8%AB%E0%B8%95%E0%B8%B8%E0%B8%9C%E0%B8%A5%E0%B8%AA%E0%B8%B3%E0%B8%84%E0%B8%B1%E0%B8%8D%E0%B9%83%E0%B8%99%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%A5%E0%B8%B7%E0%B8%AD%E0%B8%81%E0%B9%83%E0%B8%8A%E0%B9%89%20AJAX.html?q=refresh
หลักการก็คือให้ Javascript ไปเรียกหน้า php ที่มี code สำหรับกระบวนงานทั้งหมดครับ
จากโจทย์ของ จขกท คือเป็นการตรวจสอบตาราง receive ว่ามีข้อมูลหรือไม่ และถ้ามีก็ให้มันย้ายข้อมูลทั้งหมดไปที่อีกตาราง receiveOld แล้วก็ลบข้อมูลออกจาก receive ซึ่งหลักการนี้ก็น่าจะประมาณนี้ครับ
Code (PHP)
function RowID($tbl){
$sql = "SELECT * FROM $tbl;"
$result = mysql_query($sql);
$RowCount = musql_num_rows($result);
$receiveId = array();
if ($RowCount<1) {
$receiveId =null;
} else {
while ($rs = mysql_fetch_array($result)) {
array_push($receiveId, $rs[ID]);
}
}
Return $receiveId;
}
function DelReceiveData($recId){
foreach ($recId as $recordId) {
$sqlDelData = "DELETE FROM $tbl WHERE ID='$recordId' ";
$result = mysql_query($sqlDelData);
$rs = mysql_fetch_array($result);
}
echo "ลบข้อมูลในตารางแล้ว....";
}
function TransferDataTOreceiveOld(){
$recId = array();
$recId = RowID(receive);
if (array_count_values($recId)<1) {
echo "ยังไม่มีข้อมูลในตอนนี้....";
} else {
foreach ($recId as $recordId) {
$sql = "SELECT * FROM receive WHERE ID='$recordId' ;"
$result = mysql_query($sql);
while ($rs = mysql_fetch_array($result, MYSQL_NUM)) {
$receive_ID = $rs[ID]; // ID ตัวนี้คือไอดีที่มาจาก receive แต่ที่ตาราง receiveOld จะต้องมีฟิลดิ์เพื่อรองรับไอดีตัวนี้หรือเปล่าขึ้นอยู่กับการนำไปใช้นะครับ ผมสมมติว่ามีฟิลดิ์ชื่อ receive_id ที่ตาราง receiveOld นะครับ
$receive_name = $rs[name];
$receive_lastname = $rs[lastname];
$receive_job = $rs[job];
$sqlInsert = "INSERT INTO receiveOld(receive_id, name, lastname, job) VALUES('$receive_id', '$receive_name', '$receive_lastname', '$receive_job')";
$ExeCuteSQL = mysql_query($sqlInsert);
}
DelReceiveData($recId);
}
}
TransferDataTOreceiveOld();
ผมเขียนขึ้นมาแบบไม่ได้ทำการ run code จริงๆนะครับ เพราะฉะนั้นอาจจะมีข้อผิดพลาดบ้าง ....
|
|
|
|
|
Date :
2012-01-01 11:17:50 |
By :
Songkram |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ ถ้าติดอะไรขอโพสถามอีกทีนะครับ
|
|
|
|
|
Date :
2012-01-01 18:18:17 |
By :
karurub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|