ตารางที่มีความสัมพันธ์กัน ใช้ยังไงหรอคะ อันที่จริงเคยถามแล้ว แต่ยังไม่มีคนตอบให้ชัดเจน
อันที่จริงเคยถามแล้ว แต่ยังไม่มีคนตอบให้ชัดเจน
คือมีตารางสองตาราง โดยมีตาราง
1.ตาราง Locationtype
ฟิลด์ loctype_id, loctype_name
2.ตาราง Location
ฟิลด์ locCode, loctype_id, loctype_name, locName, locLatlng, locIcon, locAddress...++
ที่ต้องการก็คือ เดิมทีหนูทำเป็นตารางเดียวกัน ก็สามารถใช้ได้ปกติ เพราะเขียนไม่ยากนัก แต่มาปรับปรุงออกแบบ
ฐานข้อมูลใหม่ เพื่อง่ายต่อการจัดการ จึงแยกตารางประเภทสถานที่ออก เพื่อให้เป็นข้อมูลหลัก โดยข้อมูลหลักนี้
จะมีความสัมพันธ์กับข้อมูลสถานที่ Location โดยในฟอร์มรับข้อมูลนั้น จะมี listbox ไว้เลือกข้อมูลประเภทสถานที่
และข้อมูลอื่นๆของตาราง location
เลือกประเภทสถานที่ listbox
ชื่อสถานที่ textbox
ไอคอน textbox
ที่อยู่ textbox
เลือกตำแหน่ง div map
อันนี้เป็นโค้ดเดิมนะคะ(PHP)
if(isset($_REQUEST["del_loc"])){
$sql_loc = "DELETE FROM location WHERE locCode=".$_REQUEST["locCode"]." and admin_id=".$_SESSION["admin_id"];
mysql_query($sql_loc)or die(mysql_error());
?>
<?php
}
if(isset($_POST["add_loc"]))
{
$result_loc = mysql_query( "SELECT * FROM location where locName='".$_POST["locName"]."'");
if(mysql_num_rows($result_loc)<=0){
$locIcon = uploadIcon($_FILES['locIcon']['name'],$_FILES['locIcon']['tmp_name'],$_FILES['locIcon']['size'],$_FILES['locIcon']['type']);
$locImage = uploadImage($_FILES['locImage']['name'],$_FILES['locImage']['tmp_name'],$_FILES['locImage']['size'],$_FILES['locImage']['type']);
$latlng = str_replace("(","",$_POST["locLatLng"]);
$latlng = str_replace(")","",$latlng);
$sql = "INSERT INTO location(admin_id ,locIcon,locImage,locLatLng,locName,locAddress,locTel,loc_bus,locDetail,locType) VALUES('".$_SESSION["admin_id"]."','".$locIcon."','".$locImage."','".$latlng."','".$_POST["locName"]."','".$_POST["locAddress"]."','".$_POST["locTel"]."','".$_POST["loc_bus"]."','".$_POST["locDetail"]."','".$_POST["locType"]."')";
mysql_query($sql)or die(mysql_error());
?>
<script type="text/javascript">
$.prompt('เพิ่มตำแหน่งสำเร็จ');
</script>
<?php
}else
{
?>
<script type="text/javascript">
$.prompt('กรุณาตรวจสอบชื่อตำแหน่งใหม่');
</script>
<?php
}
}
if(isset($_POST["edit_loc"]))
{
$editname = "";
if($_POST["locName"]!=$_POST["loc_name_old"])
{
$result_loc = mysql_query( "SELECT * FROM location where locName='".$_POST["locName"]."' ");
if(mysql_num_rows($result_loc)<=0)
{
$editname .= " locName='".$_POST["locName"]."',";
}else
{
?>
<script language="javascript">
alert("ชื่อสถานที่ซ้ำ กรุณาป้อนชื่อใหม่");
</script>
<?php
}
}
$locIcon = uploadIcon($_FILES['locIcon']['name'],$_FILES['locIcon']['tmp_name'],$_FILES['locIcon']['size'],$_FILES['locIcon']['type']);
$locImage = uploadImage($_FILES['locImage']['name'],$_FILES['locImage']['tmp_name'],$_FILES['locImage']['size'],$_FILES['locImage']['type']);
if($locIcon!=""){
$editname .= " locIcon='".$locIcon."',";
}
if($locImage!=""){
$editname .= " locImage='".$locImage."',";
}
$latlng = str_replace("(","",$_POST["locLatLng"]);
$latlng = str_replace(")","",$latlng);
$sql = "UPDATE location SET ".$editname." locLatLng='".$latlng."',locName='".$_POST["locName"]."',locAddress='".$_POST["locAddress"]."', locTel='".$_POST["locTel"]."',loc_bus='".$_POST["loc_bus"]."',locDetail='".$_POST["locDetail"]."',locType='".$_POST["locType"]."' WHERE locCode=".$_POST["locCode"].$userupdate;
mysql_query($sql)or die(mysql_error());
?>
<script language="javascript">
alert("แก้ไขข้อมูลสำเร็จ");
window.location = "?";
</script>
<?php
}
?>
ในส่วนนี้เป็นโค้ดเดิมนะคะ โดยจะเปลี่ยน locType ที่อยู่ในตาราง location เปลี่ยนเป็น loctype_name ซึ่งเปลี่ยนตาราง
เป็นตาราง locationtype แทนนะคะ ช่วยหน่อยนะ ลองมาหลายวันแล้ว ตอนนี้โปรเจคใกล้สำเร็จแล้ว เหลือเพียงแค่ปรับปรุงให้ดียิ่งขึ้นคะ
ขอเป็นโค้ดตัวอย่างก็ได้นะ ที่ดูแล้วเข้าใจง่ายTag : - - - -
Date :
2009-12-06 17:36:34
By :
KhemTiD
View :
1083
Reply :
8
เงียบจัง ม้ายมีใครช่วยเลย
Date :
2009-12-06 19:29:45
By :
KhemTiD
ต้องการประมาณนี้เปล่าครับตัวอย่าง select
$sql="
SELECT loc.locCode, loc.loctype_id, loc.loctype_name, loc.locName,type.loctype_name
FROM Locationtype as type
LEFT JOIN location as loc
ON type.loctype_id=loc.loctype_id
WHERE locName='$_POST[locName]'
ORDER BY loc.loctype_id ASC
";
Date :
2009-12-06 21:16:46
By :
xbeginner01
คืออยากได้ทั้ง selcet insert update
ถ้าทำแบบตารางเดียว หนูทำได้ แต่พอแยกตาราง หนูทำไม่เป็นคะ
หาข้อมูล ก็ไม่ค่อยเข้าใจรูปแบบการเขียน ว่าต้องแก้ส่วนไหนจากของเดิมบ้าง
Date :
2009-12-06 21:40:36
By :
KhemTiD
ข้างบนไงครับ 2 ตารางมา join กันครับ
ถ้าเขียนแบบถึกๆ
Code (PHP)
$result_loc = mysql_query( "SELECT * FROM location where locName='".$_POST["locName"]."' ");
while($res=mysql_fetch_array($result_loc)){
$result_loctype=mysql_query("select * from Locationtype where loctype_id='".$res[loctype_id]." ' ");
$res2 =mysql_fetch_array($result_loctype);
echo "LOCTYPENAME ".$res2[loctype_name];
}
Date :
2009-12-06 22:36:38
By :
xbeginner01
ยังไม่ได้นะคะ เมื่อเพิ่มข้อมูลแล้ว ข้อมูลในส่วนของ ตาราง locationtype ไม่มาคะ
Date :
2009-12-07 03:19:29
By :
KhemTiD
ผมว่า export database มาแปะให้แม็คดีกว่านะ แม็คจะได้ช่วยเหลือง่ายๆ ไม่ต้องจินตนาการมาก
Date :
2009-12-07 04:24:59
By :
plakrim
admin
ฟิลด์ ชนิด
admin_id int(11)
admin_name varchar(100)
admin_userName varchar(100)
admin_password varchar(50)
admin_address text
admin_tel varchar(12)
admin_position varchar(100)
admin_email varchar(50)
admin_active int(11)
location
ฟิลด์ ชนิด
locCode int(12)
admin_id int(11)
loctype_id int(10)
loctype_name varchar(50)
locIcon text
locImage text
locLatLng varchar(50)
locName varchar(50)
locAddress text
locTel varchar(20)
locDetail text
locationtype
ฟิลด์ ชนิด
loctype_id int(10)
loctype_name varchar(50)
นี้เป็นตารางและฟิลด์นะคะ ตอนแรกไม่มีตาราง locationtype คะจะรวมกับ location เลย ตอนหลังหนูออกแบบตารางใหม่
เลยต้องการแยกรายละเอียดสถานที่กับประเภทสถานที่ออกจากกัน อันที่จริงยังมีที่จะแก้อีกหลายตารางเลย แต่ขอเพียง
ยกตัวอย่างฟอร์มนี้สักอัน ก็โอเคแล้วหละคะ อันอื่นค่อยไปหัดทำเอง
เสริมอีกนิดนะ จากโค้ดเดิมที่หนูใช้ listbox โดยการป้อนข้อมูลรายการเข้าไป หนูเปลี่ยนใหม่เป็นการดึงจากตารางข้อมูลหลักของ locationtype
Code (PHP)
<tr><td align="right" width="30%"><span class="style6">ประเภทสถานที่</span><td><select name="locSelect" id="startpoint">
<?php
$q="select * from locationtype ";
$qr=mysql_query($q);
while($rs=mysql_fetch_array($qr)){
?>
<option value="<?=$rs['loctype_id']?>"><?=$rs['loctype_name']?></option>
<?php } ?>
</select></td></td></tr>
ในฟอร์มก็ให้เลือกประเภทสถานที่ นอกนั้นก็เหมือนเดิมกับในโค้ด แล้วตอนบันทึก แก้ไข ให้ข้อมูลบันทึกสัมพันธ์กับตารางข้อมูลหลัก locationtype ด้วย ประมาณนี้นะคะ
Date :
2009-12-07 17:06:48
By :
KhemTiD
Date :
2009-12-08 10:28:15
By :
KhemTiD
Load balance : Server 05