ICrazyBoy

Tue 19 Feb 2008 16:44:00
Tue 19 Feb 2008 16:44:00
ก่อนอื่นต้องอธิบายก่อนว่า ต้องการเขียน sql ดึงข้อมูลออกมาโชว์ โดย database ที่จะดึงมาโชว์ ไม่ได้ออกแบบเอง
มีคนทำไว้ แล้วให้ผมมาทำต่อ ค้นที่ทำหายตัวเข้ากลีบเมฆแล้ว (แต่ผมว่าออกแบบซับซ้อนมากๆ หรือว่าผมโง่ แต่คิดว่าน่าจะอันหลังนะ )
ต้องการ ค้นหาข้อมูลจาก list/menu ประกอบด้วย 2 ขั้นตอน ซึ่งข้อมูลใน list/menu นี้จะดึง database ทั้งหมด
ในขั้นที่ 1 จะมี 1 list/menu เก็บ type ของบ้านเช่า
ในส่วนนี้จะให้เลือกแล้วจะนำค่าที่ได้คือ class_id ในตาราง bkkapart_en_class
ไปทำการดึงข้อมูลจาก database มาโชว์ใน list/menu ใน step 2 ซึ่งใน step 2 จะมี list/menu ดังนี้
1 city
2 area
3 beds
-------------------
ในส่วนของการดึงข้อมูลมาโชว์ใน list
-------------------
<form method="post" action="search_result.php" name="searchresult" id="searchresult">
<div id="userPw">
<fieldset><legend><b>Search Form</b></legend>
<br />
<b>Step 1 </b><br />
<!-- Type of Properties....-->
Type :<br />
<select name="type" id="type" onchange="location.href='search_form.php?class_id='+this.value;">
<option value="">---- Select Type of Properties ----</option>
<?
$sql_type = "select * from bkkapart_en_class order by class_rank";
$dbquery_type = mysql_db_query($dbname,$sql_type);
while ($result_type = mysql_fetch_array($dbquery_type))
{
if($class_id == $result_type[class_id])
{
?>
<option value="<?=$result_type[class_id];?>" selected="selected"><?=$result_type[class_name];?></option>
<?
}else{ ?>
<option value="<?=$result_type[class_id];?>"><?=$result_type[class_name];?></option>
<?
}
}
?>
</select><br />
<!-- End Type of Properties.... -->
<b>Step 2</b><br />
<!-- City.... -->
City :<br />
<select name="city" id="city">
<option value="">---- Select City ----</option>
<?
if($class_id != "")
{
$sql_city = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'city' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_city = mysql_db_query($dbname,$sql_city);
while($result_city = mysql_fetch_array($dbquery_city))
{
?>
<option value="<?=$result_city[listingsdbelements_field_value];?>"><?=$result_city[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select><br />
<!-- End City.... -->
<!-- Area.... -->
Area :<br />
<select name="Area" id="Area">
<option value="">------ Select Area -----</option>
<?
if($class_id != "")
{
$sql_Area = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'Area' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_Area = mysql_db_query($dbname,$sql_Area);
while($result_Area = mysql_fetch_array($dbquery_Area))
{
?>
<option value="<?=$result_Area[listingsdbelements_field_value];?>"><?=$result_Area[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select><br />
<!-- End Area.... -->
<!-- Beds.... -->
Beds :<br />
<select name="beds" id="beds">
<option value="">--- Select Bed ---</option>
<?
if($class_id != "")
{
$sql_beds = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'beds' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_beds = mysql_db_query($dbname,$sql_beds);
while($result_beds = mysql_fetch_array($dbquery_beds))
{
?>
<option value="<?=$result_beds[listingsdbelements_field_value];?>"><?=$result_beds[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select> <br />
----------
ส่วนของการค้นหา
----------
ขั้นตอนที่ 1 ให้เลือก type ของบ้านเช่า
โดยเมื่อเลือกขั้นตอนที่ 1 แล้จะเก็บ class_id จากตาราง class มาทำการค้นหาต่อในขั้นที่ 2
ขั้นตอนที่ 2 ให้เลือกค้นหาจาก list/menu ดังต่อไปนี้ (เลือกค้นหาอย่างน้อยจาก 1 list/menu)
1.city
2.area
3.beds
คำถาม
1.อยากถามว่าจะ query ยังไงในขั้นตอนการค้นหาจาก list/menu เพื่อจะเอาข้อมูลของบ้าน ที่ต้องการคือ title,city,area,beds ออกมาแสดง ในหน้า search_result.php
2.หน้า search_result.php ต้องเขียนยังไงเหรอครับ
--------------
database ที่เกี่ยวข้อง
--------------
ตาราง bkkapart_en_class (เก็บรูปแบบบ้านเช่า)
-class_id
-class_name
-class_rank
ตาราง bkkapart_en_listingsdb
-listingsdb_id
-userdb_id
-listingsdb_title .............(title)
-listingsdb_expiration
-listingsdb_notes
-listingsdb_creation_date
-listingsdb_last_modified
-listingsdb_hit_count
-listingsdb_featured
-listingsdb_active
-listingsdb_mlsexport
ตาราง bkkapart_en_classlistingsdb
-classlistingsdb_id
-class_id
-listingsdb_id
ตาราง bkkapart_en_listingsdbelements
-listingsdbelements_id
-listingsdbelements_field_name (city area beds price...)
-listingsdbelements_field_value (bangkok,onnut,3,25000...)
-listingsdb_id userdb_id
ขอบคุณทุกุท่านครับ
มีคนทำไว้ แล้วให้ผมมาทำต่อ ค้นที่ทำหายตัวเข้ากลีบเมฆแล้ว (แต่ผมว่าออกแบบซับซ้อนมากๆ หรือว่าผมโง่ แต่คิดว่าน่าจะอันหลังนะ )
ต้องการ ค้นหาข้อมูลจาก list/menu ประกอบด้วย 2 ขั้นตอน ซึ่งข้อมูลใน list/menu นี้จะดึง database ทั้งหมด
ในขั้นที่ 1 จะมี 1 list/menu เก็บ type ของบ้านเช่า
ในส่วนนี้จะให้เลือกแล้วจะนำค่าที่ได้คือ class_id ในตาราง bkkapart_en_class
ไปทำการดึงข้อมูลจาก database มาโชว์ใน list/menu ใน step 2 ซึ่งใน step 2 จะมี list/menu ดังนี้
1 city
2 area
3 beds
-------------------
ในส่วนของการดึงข้อมูลมาโชว์ใน list
-------------------
<form method="post" action="search_result.php" name="searchresult" id="searchresult">
<div id="userPw">
<fieldset><legend><b>Search Form</b></legend>
<br />
<b>Step 1 </b><br />
<!-- Type of Properties....-->
Type :<br />
<select name="type" id="type" onchange="location.href='search_form.php?class_id='+this.value;">
<option value="">---- Select Type of Properties ----</option>
<?
$sql_type = "select * from bkkapart_en_class order by class_rank";
$dbquery_type = mysql_db_query($dbname,$sql_type);
while ($result_type = mysql_fetch_array($dbquery_type))
{
if($class_id == $result_type[class_id])
{
?>
<option value="<?=$result_type[class_id];?>" selected="selected"><?=$result_type[class_name];?></option>
<?
}else{ ?>
<option value="<?=$result_type[class_id];?>"><?=$result_type[class_name];?></option>
<?
}
}
?>
</select><br />
<!-- End Type of Properties.... -->
<b>Step 2</b><br />
<!-- City.... -->
City :<br />
<select name="city" id="city">
<option value="">---- Select City ----</option>
<?
if($class_id != "")
{
$sql_city = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'city' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_city = mysql_db_query($dbname,$sql_city);
while($result_city = mysql_fetch_array($dbquery_city))
{
?>
<option value="<?=$result_city[listingsdbelements_field_value];?>"><?=$result_city[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select><br />
<!-- End City.... -->
<!-- Area.... -->
Area :<br />
<select name="Area" id="Area">
<option value="">------ Select Area -----</option>
<?
if($class_id != "")
{
$sql_Area = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'Area' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_Area = mysql_db_query($dbname,$sql_Area);
while($result_Area = mysql_fetch_array($dbquery_Area))
{
?>
<option value="<?=$result_Area[listingsdbelements_field_value];?>"><?=$result_Area[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select><br />
<!-- End Area.... -->
<!-- Beds.... -->
Beds :<br />
<select name="beds" id="beds">
<option value="">--- Select Bed ---</option>
<?
if($class_id != "")
{
$sql_beds = "SELECT distinct lde.listingsdbelements_field_value
FROM bkkapart_en_listingsdbelements lde, bkkapart_classlistingsdb cld
WHERE lde.listingsdbelements_field_name = 'beds' and lde.listingsdb_id = cld.listingsdb_id and cld.class_id = '$class_id'
ORDER BY listingsdbelements_field_value";
$dbquery_beds = mysql_db_query($dbname,$sql_beds);
while($result_beds = mysql_fetch_array($dbquery_beds))
{
?>
<option value="<?=$result_beds[listingsdbelements_field_value];?>"><?=$result_beds[listingsdbelements_field_value];?></option>
<?
}
}
?>
</select> <br />
----------
ส่วนของการค้นหา
----------
ขั้นตอนที่ 1 ให้เลือก type ของบ้านเช่า
โดยเมื่อเลือกขั้นตอนที่ 1 แล้จะเก็บ class_id จากตาราง class มาทำการค้นหาต่อในขั้นที่ 2
ขั้นตอนที่ 2 ให้เลือกค้นหาจาก list/menu ดังต่อไปนี้ (เลือกค้นหาอย่างน้อยจาก 1 list/menu)
1.city
2.area
3.beds
คำถาม
1.อยากถามว่าจะ query ยังไงในขั้นตอนการค้นหาจาก list/menu เพื่อจะเอาข้อมูลของบ้าน ที่ต้องการคือ title,city,area,beds ออกมาแสดง ในหน้า search_result.php
2.หน้า search_result.php ต้องเขียนยังไงเหรอครับ
--------------
database ที่เกี่ยวข้อง
--------------
ตาราง bkkapart_en_class (เก็บรูปแบบบ้านเช่า)
-class_id
-class_name
-class_rank
ตาราง bkkapart_en_listingsdb
-listingsdb_id
-userdb_id
-listingsdb_title .............(title)
-listingsdb_expiration
-listingsdb_notes
-listingsdb_creation_date
-listingsdb_last_modified
-listingsdb_hit_count
-listingsdb_featured
-listingsdb_active
-listingsdb_mlsexport
ตาราง bkkapart_en_classlistingsdb
-classlistingsdb_id
-class_id
-listingsdb_id
ตาราง bkkapart_en_listingsdbelements
-listingsdbelements_id
-listingsdbelements_field_name (city area beds price...)
-listingsdbelements_field_value (bangkok,onnut,3,25000...)
-listingsdb_id userdb_id
ขอบคุณทุกุท่านครับ
webmaster

Tue 19 Feb 2008 19:36:54
Tue 19 Feb 2008 19:36:54
ก็เพียงแต่เอาแต่ละ table ที่มีความสัมพันธ์กับข้อมูลที่ต้องการมา JOIN กันจากนั้นก็ดึงเอาข้อมูลที่ต้องการออกมาเท่านั้นเองครับ ลองอ่าน document ของ mysql เรื่องการ JOIN ดูครับ
ติงนิดนึงครับ = มีไว้ assign ครับไม่ได้มีไว้เพื่อแสดงผลถึงแม้ว่าจะสามารถทำได้ในบาง server แต่ไม่ใช่มาตรฐานอาจจะทำให้ app คุณใช้ไม่ได้ในบาง server ก็ได้ครับ
อีกอย่าง SELECT 2 tables นั้นควรทำการ join กันครับเนื่องจากการไม่ทำการ JOIN กันนั้นจะทำให้เกิด full table scan ในทั้ง 2 table ทำให้ performance ลดลงไปครับ
ติงนิดนึงครับ = มีไว้ assign ครับไม่ได้มีไว้เพื่อแสดงผลถึงแม้ว่าจะสามารถทำได้ในบาง server แต่ไม่ใช่มาตรฐานอาจจะทำให้ app คุณใช้ไม่ได้ในบาง server ก็ได้ครับ
อีกอย่าง SELECT 2 tables นั้นควรทำการ join กันครับเนื่องจากการไม่ทำการ JOIN กันนั้นจะทำให้เกิด full table scan ในทั้ง 2 table ทำให้ performance ลดลงไปครับ

















