พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP development / เรื่องการ search จากหลาย list/menu
ICrazyBoy
ICrazyBoy
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 &nbsp;&nbsp;:<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 &nbsp;&nbsp;:<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 &nbsp;:<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 &nbsp;:<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
webmaster
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 ลดลงไปครับ
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login