Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > เก็บข้อมูล ยังไงในคราวเดียวกัน INSERT เข้าทั้ง 2 table แต่อีก ใน 2 table ต้องอ้างอิง จากไอดี AUTO_INCREMENT



 

เก็บข้อมูล ยังไงในคราวเดียวกัน INSERT เข้าทั้ง 2 table แต่อีก ใน 2 table ต้องอ้างอิง จากไอดี AUTO_INCREMENT

 



Topic : 099638



โพสกระทู้ ( 455 )
บทความ ( 0 )



สถานะออฟไลน์




Code (PHP)
table ที่ 1

room_id, cus_id, room_name


table ที่ 2

cus_id, cus_name, cus_surname





ถ้าเพิ่มพร้อมกัน ในคราวเดียวกัน เราจะเอา table ที่ 1 ไปอิง table ที่ 2 ยังไง เพราะ cus_id ของ table ที่ 2 เป็น AUTO_INCREMENT
และผมไม่อยากใช่ function LAST_INSERT_ID() เพราะมันมีโอกาศผิดพลาดได้ ถ้ามีคน คีร์ พร้อมๆ กันหลาย คน พอจะมีทางอื่น ไหมครับ ผมคิดไม่ออก รบกวน พี่ๆ น้องๆ ด้วยครับ



Tag : PHP, JavaScript, jQuery









ประวัติการแก้ไข
2013-08-26 21:40:47
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-08-26 21:40:20 By : yamcrocodile View : 3795 Reply : 9
 

 

No. 1



โพสกระทู้ ( 3,847 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์
Twitter Facebook

วิธีที่จะให้นี้ ผมไม่แนะนำให้ใช้เท่าไหร่น่ะครับ แต่ก็เอาเป็นว่ามันตอบคำถามได้ก็แล้วกันน่ะ
Code (PHP)
$result=mysql_query("insert into table2(cus_name, cus_surname)values('$cus_name','$cus_surname')");

if($result)(
  mysql_query("insert into table1(room_id, cus_id, room_name)values('$room_id',select max(cus_id) from table1),'$room_name')");
)









ประวัติการแก้ไข
2013-08-26 23:04:40
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-26 22:25:55 By : mangkunzo
 


 

No. 2



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ใช้ LAST_INSERT_ID() นั่นล่ะครับ ไม่มีโอกาสผิดพลาดหรอกครับ ที่คุณได้ยินมาเป็นข้อมูลที่ผิดครับ
LAST_INSERT_ID() จะเอา ID ของ connection ปัจจุบันเท่านั้น ไม่เกี่ยวกับ connection อื่น
ต่อให้มีผู้ใช้ INSERT พร้อมกันล้าน connection
LAST_INSERT_ID() ก็จะคืนแถวล่าสุดของ connection ปัจจุบันเท่านั้น

อ้างอิงจากที่นี่เลยครับ จะได้มั่นใจ
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-26 22:51:25 By : phpinfo()
 

 

No. 3



โพสกระทู้ ( 455 )
บทความ ( 0 )



สถานะออฟไลน์


ขอขอบคุณ คุณ mangkunzo และคุณ phpinfo()

นิดนึงนะครับ ฟังชั้น LAST_INSERT_ID() ผมไม่ได้ไปฟังคนอื่นหรอกครับ ผมประสบปัญหาด้วยตัวเอง อาจเป็น เพราะว่าผม เขียนไม่ถูกหลักการหรือ เปล่า เลยทำให้ เกิดการผิดพลาด ขึ้น ถ้ามีคนยืนยัน ว่ามันไม่มีทางผิดพลาด ได้ 100% ผมจะได้หาวิธีใช้ให้มันถูกต้องและ แก้ใขต่อไป

ขอขอบคุณมา ณ ที่นี้ด้วยนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-26 23:07:25 By : yamcrocodile
 


 

No. 4



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : yamcrocodile เมื่อวันที่ 2013-08-26 23:07:25
รายละเอียดของการตอบ ::
อ่อครับ ผมนึกว่าคุณไปอ่านบทความจากที่อื่นมา เพราะผมเคยเคยตอบกระทู้ที่ถามเรื่องนี้ และจขกท.เขาบอกว่าได้ข้อมูลมาแบบนั้นจากบทความในเว็บอื่นน่ะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-26 23:21:54 By : phpinfo()
 


 

No. 5



โพสกระทู้ ( 455 )
บทความ ( 0 )



สถานะออฟไลน์


สำเร็จแล้วครับ วิธีการใช้ของผมเอามาแบ่งปันกันครับ ไม่รู้ว่าถูกต้อง หรือเปล่า แต่มันสามารถใช้ได้

Code (PHP)
<?php

mysql_query("INSERT INTO table1 VALUES ('','$name','$surname')");
$last_id = mysql_query("SELECT LAST_INSERT_ID()");
$result = mysql_fetch_assoc($last_id);

$last = $result['LAST_INSERT_ID()'];

mysql_query("INSERT INTO table2 VALUES ('','$last','$room_id')");


?>



ประวัติการแก้ไข
2013-08-27 01:37:30
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-27 01:33:57 By : yamcrocodile
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

MySQL ฉลาดพอที่จะเลือก Connection กับ LAST_INSERT_ID() ของ Client ที่ Request ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-27 06:09:37 By : mr.win
 


 

No. 7



โพสกระทู้ ( 455 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 6 เขียนโดย : mr.win เมื่อวันที่ 2013-08-27 06:09:37
รายละเอียดของการตอบ ::
ครับพี่วิน


จริงๆแล้ว อาจเป็น จะสับสน mysq_insert_id() กับ LAST_INSERT_ID() ละมั้งครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-27 06:24:57 By : yamcrocodile
 


 

No. 8



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

อันนี้ผมเดานะ จริงๆ ที่บอกว่าเคยประสบปัญหาเนี่ย อาจจะเป็นเพราะใช้ mysql_insert_id() ก็ได้มั้งครับ (ถ้าคุณเคยใช้)
เพราะฟังก์ชั่นกลุ่ม mysql_xxxxx() หรือที่เรียกว่า libmysql เนี่ย มันเก่ามากๆ และไม่มีการอัพเดทมานานแล้ว อาจจะมีบั๊กอยู่
ซึ่งการทำงานของ mysql_insert_id() มันอาจจะไม่เป็นแบบ LAST_INSERT_ID() ก็เป็นได้

ถ้าเป็นไปได้อยากให้เปลี่ยนมาใช้ mysqli ครับ
ถ้าสนใจลองอ่านบทความของผมดูนะครับ อาจจะพอช่วยให้เริ่มต้นกับ mysqli ได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-27 07:47:37 By : phpinfo()
 


 

No. 9



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

เพื่อความแน่ใจผมเลยลองทดสอบดูครับ
โดยลอง INSERT เข้าในตารางที่มีคอลัมน์เดียวเป็น int ชนิด PRIMARY และ AUTO_INCREMENT
โดย INSERT และหน่วงเวลาไว้ 5 วิ และระหว่างนั้นก็รันอีก connection หนึ่ง


Code (PHP)
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('testdb');
mysql_query("INSERT INTO `ids` VALUES ()");
sleep(5);
echo mysql_insert_id();


ก็ได้ผลปกตินะครับ connection ทั้งสองก็แสดง mysql_insert_id() เป็นค่าของ connection นั้นๆ
สรุปว่า mysql_insert_id() ทำงานเหมือน LAST_INSERT_ID() ครับ ไม่ได้แตกต่างกันอย่างใด

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-27 08:20:24 By : phpinfo()
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เก็บข้อมูล ยังไงในคราวเดียวกัน INSERT เข้าทั้ง 2 table แต่อีก ใน 2 table ต้องอ้างอิง จากไอดี AUTO_INCREMENT
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่