พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP development / การค้นหาด้วย and/or
เด็กมีปัญหา
เด็กมีปัญหา
Fri 8 Sep 2006 14:35:55

ตอนนี้เขียน code ค้นหาคำที่เป็น and/or ได้แล้วเช่น disk and drive โดยการแบ่งคำออกมาเช็คเป็นตัวๆ ไป แต่ถ้าคำมันเกิดมีช่องว่างก่อน and/or เช่น hard disk and drive a จะทำอย่างไรได้บ้าง รบกวนช่วยบอกด้วย แบบว่าคิดไม่ออกแล้ว

Administrator
Fri 8 Sep 2006 14:46:51
การค้นหามีหลายวิธีครับ ถ้าเป็น string ธรรมดาก็ใช้ได้ทั้ง ereg() และ preg_match() หรือ strstr ก็ได้ครับ
หรือถ้าต้องการคำที่ตรงกับคำที่ค้นหาเลยก็ทำการ explode() แยกออกเป็นคำๆแล้วก็เปรียบเทียบด้วย == โดยตรงเลยก็ได้ครับ ต้องดูความต้องการครับว่าค้นหาแบบใดเพื่อใช้อะไรด้วยครับ
เด็กมีปัญหา
เด็กมีปัญหา
Fri 8 Sep 2006 15:24:00

ขอบคุณครับคุณ Admin แต่ว่าลองดู code ที่ผมเขียนแล้วกันแบบว่าเขียนแบบมือใหม่เลยครับ

$buffer = explode(" ",$word);
for($i=0;$i<count($buffer);$i++) {
 if($i==0) {
  $sql="SELECT * FROM $table WHERE $cond LIKE '%$buffer[$i]%' ";
 }
 else {
  switch($buffer[$i]) {
  case "and" : $sql = $sql. "and ";
      break;
  case "or"  : $sql = $sql. "or ";
      break;
  default    : $sql = $sql. "$cond like '%$buffer[$i]%' ";
      break;
  }
 }
}

$word คือคำที่รับมาจากฟอร์ม $table คือ ตัวแปรที่รับจากการเลือกรายชื่อว่าจะค้นหาจากที่ไหนจากฟอร์ม $cond คือตัวที่ตัวการค้นหา ถ้าทำตาม code นี้จะหาได้เฉพาะคำที่เป็นคำเดี่ยวๆ เช่น disk and drive จะหาเจอในdb ที่มีทั้ง disk และ drive แต่ถ้าเป็น hard disk and drive มันจะทำงานไม่ได้ มีแนวคิดหรือวิธีการที่ดีกว่านี้ไหมครับ ขอบคุณล่วงหน้าเลยแล้วกันครับ

Administrator
Fri 8 Sep 2006 16:19:51
พอเข้าใจแล้วครับ

<?
$txt = "hard disk and drive";
$cond = "field_name";
$table = "table_name";

$exp_and = explode(" and ", $txt);
$sql = "SELECT * FROM ".$table." WHERE";
if(count($exp_and) > 0){
    for($i = 0; $i < count($exp_and); $i++){
        $sql .= (($i==0)?" ":" AND ").$cond." LIKE '%".$exp_and[$i]."%'";
    }
}
echo $sql;
?>

ลองเอาไปประยุกต์ดูครับ จากตัวอย่างเป็นโค๊ดเฉพาะ AND เท่านั้นครับ
เด็กมีปัญหา
เด็กมีปัญหา
Fri 8 Sep 2006 18:45:45

นำไปประยุกต์ใช้งานได้ดีทีเดียวครับ ถ้าติดปัญหาอะไรอีกจะรบกวนคุณ Admin อีกนะครับผม

Administrator
Fri 8 Sep 2006 19:39:49
ด้วยความยินดีครับ
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