Tue 26 Sep 2006 20:57:31
สวัสดีครับ
คิดว่าคุณคงสบายดีนะครับ และยังรู้สึกขอบคุณอยู่เสมอที่คอยช่วยเหลือในการเขียนโปรแกรม
คงต้องรบกวนอีกแล้วครับ ขณะนี้กำลังเขียนในส่วนของการ Insert ข้อมูลลงใน Mysql database ขอสอบถามดังนี้
- ข้อมูลของ USER มีทั้งหมด 27 ข้อมูล การบันทึกข้อมูลลงใน Mysql database ผมจึงได้แบ่งเก็บออกเป็น 3 tables ซึ่งการแบ่งเก็บข้อมูลออกเป็นหลายตาราง กับการเก็บลงในตารางเดียว อย่างไหนจะได้ผลดีกว่ากันครับ?
- 3 tables ที่แบ่งแยกกันเก็บข้อมูลนั้น ผมใช้ข้อมูล email เป็นตัวเชื่อมระหว่าง table คือ ทั้ง table_1, table_2 และ table_3 นั้น จะมี filed email อยู่
- การ insert ข้อมูล ลงใน Mysql ทั้ง 3 table นั้น ผมเขียนดังนี้
<?
error_reporting(E_ALL ^ E_NOTICE);
session_start();
$dbhost="localhost";
$dbname="company";
$dbuser="root";
$dbpass="";
if(trim($_POST['code']) !=($_SESSION['ses_code']))
{
echo"<b>Code does not correct. </b>";
echo"<a href=add_index.php><b>Please add your company again !</b>";
exit;
}
$link=mysql_connect("localhost","root","");
if (!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select email1 from company_1 where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
if($n==0)
{
$sql="INSERT into company_1(company, cperson, address, country, phone, fax, email1, email2, mail, dtnow)
values('$company', '$cperson', '$address', '$country', '$phone', '$fax', '$email1', '$email2', '$mail, '$now')";
$sql="INSERT into company_2(email1, productd, dtnow)
values('$email1', '$productd', '$now')";
$sql="INSERT into company_3(email1, agri, alkohol, nonal, bakery, cannedfood, cereals, candies, sugar, coffee,
condiments, foodin, fruits, dressings, meat, milk, oil, organic, pasta, ready, seafood, dtnow)
values('$email1', '$agri', '$alkohol', '$nonal', '$bakery', '$cannedfood', '$cereals', '$candies', '$sugar', '$coffee',
'$condiments', '$foodin', '$fruits', '$dressings', '$meat', '$milk', '$oil', '$organic', '$pasta', '$ready', '$seafood', '$now')";
$res=mysql_query($sql, $link);
if($res==1)
print("Adding to database is OK.");
else
print("Error adding to table.");
}
else
{
print("This email already exists.");
}
}
ผมเขียนโปรแกรมดังนี้ แต่พอผมใส่ข้อมูลลงในฟอร์มแล้ว enter ปรากฎว่าขึ้น error Error adding to table.
พยายามดูแล้วว่าเขียนผิดตรงไหน ก็สุดปัญญา จึงต้องรบกวนด้วยครับ
อนันต์
ถ้าเราแบ่งการบันทึกออกเป็นขั้นๆ เหมือนกับการสมัครงานหรือสมัครสมาชิก จะสามารถแบ่งเป็นหน้าๆได้ การบันทึกก็อาจจะทำหน้าละ table ก็ได้ครับ
แต่ก็มีบางกรณีที่ไม่สามารถทำเป็นขั้นๆได้ส่วนตัวแล้วก็ทำเป็น table เดียวจะสะดวกกว่าครับ และอีกอย่างคือการทำ index หรือ key อื่นๆเราจะสามารถควบคุมได้ง่ายกว่าครับ
ปัญหาส่วนมากที่ทำเป็น table เดียวนั้นคือเมื่อตอน select ข้อมูลนั้นอย่าใช้ select * ครับเอาเฉพาะข้อมูลที่จำเป็นเท่านั้น เป็นหนึ่งในวิธีการ optimization การเขียน application ติดต่อกับฐานข้อมูลครับ
เท่าที่อ่านดูก็ไม่น่าจะผิดตรงไหนนะครับ เพียงแต่ว่า
1. ตัวแปรต่างๆที่นำมาใช้ในการ insert นั้นมาจากที่ใดหรือครับ
2. ตัวแปร $sql นั้นถูกนำมาใช้ในการเก็บ SQL Query ไว้ 3 ครั้งแต่ว่ามีการสั่ง mysql_query ครั้งเดียว ถ้า script นี้ทำงานได้ก็จะทำให้เกิดการบันทึกลงใน table company_3 เพียง table เดียวครับ ถ้ามี 3 table ต้องใช้ mysql_query() 3 ครั้งครับ
3. การ debug นั้นให้ทำการ echo $sql ในแต่ละช่วงของคำสั่ง แล้วเอาคำสั่ง SQL ที่ถูกแสดงผลออกมานั้นไปรันใน phpMyAdmin ครับจะมีการแจ้งว่าคำสั่งของเรานั้นผิดอย่างไร
*ทุกครั้งที่ทำการ select ข้อมูลเมื่อใช้งานเสร็จแล้วควรใช้ mysql_free_result() เพื่อคืน resource ให้กับระบบครับ แล้วก็ใช้ mysql_close() ทุกครั้งที่ไม่มีการใช้งาน mysql แล้วครับ
**ถ้าตัวแปร $now เป็นค่าเวลาปัจจุบันแล้วสามารถใช้ NOW() ใน mysql ได้ครับจะทำให้ application ทำงานได้เร็วขึ้นครับ
Tue 26 Sep 2006 22:47:03
ขอบคุณครับ
คำแนะนำในเรื่องของการเก็บข้อมูลลง table นั้น ทำให้ผมสรุปได้แล้วว่าจะเป็น 1 table และคงจะเริ่ม key ข้อมูลใส่ใน database ได้แล้ว เพราะข้อมูลมีจำนวนมาก ผมไม่อยากต้องมาเปลี่ยนอีกทีหลัง
ส่วนเรื่องของ $now นั้น ผมเองเห็นในหนังสือ PHP เห็นเขียนมาด้วย และคิดว่าเป็นการบันทึกเวลาปัจจุบัน จึงได้ลองใส่ดู และจะลองดูผลว่าเป็นอย่างไร? อย่างไรก็ดี ในเรื่องนี้คงจะต้องขอคำแนะนำจากคุณดังนี้
- ผมเขียนโปรแกรมดังนี้
$sql="INSERT into company(email1, dtnow)
values('$email1', now())";
- ในฐานข้อมูล Mysql แล้ว ผมต้องมีฟิลด์ dtnow เพิ่มขึ้นดังนี้ใช่ไหมครับ
Email1 dtnow
- ค่าเวลาของ dtnow นั้นจะโชว์ออกมาเป็นอย่างไรครับ จะโชว์เป็นอย่างนี้หรือเปล่าครับ
25 sep 2006, .
- แล้วค่าของ dtnow นั้น จะบันทึกอย่างไรครับ?
ขอคำแนะนำด้วยครับ
อนันต์
1-2 ใช้ครับต้องทำการเพิ่ม field
3. สามารถใช้ DATE_FORMAT() เพื่อใช้ในการจัดรูปแบบได้ครับ http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
4. ค่าของ dtnow นั้นถ้าตั้งเป็นชนิด DateTime ก็จะใช้ NOW() ถ้าเป็น Timestamp ก็จะใช้ CURRENT_TIMESTAMP
Wed 27 Sep 2006 17:35:17
ขอบคุณครับที่แนะนำ
ผมไปศึกษาหนังสือ PHP ในเรื่องการจัดการเกี่ยวกับวันที่และเวลา และสามารถเขียนโปรแกรมการแสดงเวลาได้ดังนี้
<?
$today=getdate();
$month=$today["month"];
$mday=$today["mday"];
$year=$today["year"];
$hour=$today["hours"];
$minute=$today["minutes"];
$second=$today["seconds"];
echo"<center><fontsize=14><b>";
echo"$month $mday $year ";
echo"".$hour.":".$minute.":".$second;
echo"</b></font></center>";
echo"<br>";
?>
แต่ก็มีคำถามว่าผมจะเขียนโปรแกรมนี้เพื่อ insert เวลาเข้าไปเก็บในฐานข้อมูลลูกค้าได้อย่างไร เพื่อที่จะได้ทราบว่าข้อมูลลูกค้าแต่ละรายนั้นผม key เข้าไปเก็บเมื่อไร ซึ่งรวมทั้งการสมัครสมาชิกด้วยว่า สมาชิกเข้ามาสมัครที่เก็บเว็บไซค์เมื่อวันที่เท่าไร?
โดยโปรแกรมที่ผมเขียนเพื่อ insert เข้าไปยังฐานข้อมูลใน Mysql เป็นดังนี้
<?
error_reporting(E_ALL ^ E_NOTICE);
session_start();
$dbhost="localhost";
$dbname="company";
$dbuser="root";
$dbpass="";
if(trim($_POST['code']) !=($_SESSION['ses_code']))
{
echo"<b>Code does not correct. </b>";
echo"<a href=add_index.php><b>Please add your company again !</b>";
exit;
}
$link=mysql_connect("localhost","root","");
if (!$link)
{
print("Error");
}
else
{
mysql_select_db("company",$link);
$sql="select email1 from company where email1='$email1'";
$res=mysql_query($sql, $link);
$n=mysql_num_rows($res);
if($n==0)
{
$sql="INSERT into company(company, cperson, address, country, phone, fax, email1, email2, web,
productd, agri, alkohol, nonal, bakery, cannedfood, cereals, candies, sugar, coffee, condiments, foodin,
fruits, dressings, meat, milk, oil, organic, pasta, ready, seafood, mail, dtnow)
values('$company', '$cperson', '$address', '$country', '$phone', '$fax', '$email1', '$email2', '$web',
'$productd', '$agri', '$alkohol', '$nonal', '$bakery', '$cannedfood', '$cereals', '$candies', '$sugar', '$coffee', '$condiments', '$foodin',
'$fruits', '$dressings', '$meat', '$milk', '$oil', '$organic', '$pasta', '$ready', '$seafood', '$mail', $dtnow)";
$res=mysql_query($sql, $link);
if($res==1)
print("Adding to database is OK.");
else
print("Error adding to table.");
}
else
{
print("This email already exists.");
}
}
?>
ตัวแปรที่ใช้ในการเก็บเวลาได้แก่ ตัวแปร dtnow
และใน mysql นั้นผมได้เพิ่ม filed dtnow เพื่อใช้ในการเก็บเวลาเป็นดังนี้
|
ฟิลด์ |
ชนิด |
แอตทริบิวต์ |
ว่างเปล่า (null) |
ค่าปริยาย |
เพิ่มเติม |
|
dtnow |
timestamp(14) |
|
ใช่ |
NULL |
|
ไม่ทราบว่า field ใน mysql นั้น ถูกต้องหรือเปล่าครับ
กรุณาช่วยแนะนำด้วยครับ
อนันต์
productd, agri, alkohol, nonal, bakery, cannedfood, cereals, candies, sugar, coffee, condiments, foodin,
fruits, dressings, meat, milk, oil, organic, pasta, ready, seafood, mail, dtnow)
values('$company', '$cperson', '$address', '$country', '$phone', '$fax', '$email1', '$email2', '$web',
'$productd', '$agri', '$alkohol', '$nonal', '$bakery', '$cannedfood', '$cereals', '$candies', '$sugar', '$coffee', '$condiments', '$foodin',
'$fruits', '$dressings', '$meat', '$milk', '$oil', '$organic', '$pasta', '$ready', '$seafood', '$mail', CURRENT_TIMESTAMP)";
ตามนี้ได้เลยครับ
Thu 28 Sep 2006 08:10:30
Fri 4 Jul 2008 11:00:40
สวัสดีค่ะ
ถ้าต้องการทำ action โดยที่เราทำการเลือกลิ้งแล้วนำข้อมูลไปเก็บลงdatabase ต้องทำอย่างไรบ้างคะ
Sat 5 Jul 2008 23:38:53
Tue 19 Aug 2008 09:20:51
ช่วยอธิบาย
การทำinsert ข้อมูลที่มากกว่า 1 table ใน phpmyadmin ให้ฟังหน่อยนะค่ะ จะต้องใช้codeอย่างไร
Wed 20 Aug 2008 12:32:23
1. INSERT เต็มรูปแบบ INSERT() VALUES()
2. INSERT แบบย่อ INSERT() VALUES() VALUES()
3. INSERT โดยใช้ข้อมูลจาก TABLE อื่น INSERT() SELECT ....

















