Fri 8 Sep 2006 14:35:55
ตอนนี้เขียน code ค้นหาคำที่เป็น and/or ได้แล้วเช่น disk and drive โดยการแบ่งคำออกมาเช็คเป็นตัวๆ ไป แต่ถ้าคำมันเกิดมีช่องว่างก่อน and/or เช่น hard disk and drive a จะทำอย่างไรได้บ้าง รบกวนช่วยบอกด้วย แบบว่าคิดไม่ออกแล้ว
หรือถ้าต้องการคำที่ตรงกับคำที่ค้นหาเลยก็ทำการ 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 มันจะทำงานไม่ได้ มีแนวคิดหรือวิธีการที่ดีกว่านี้ไหมครับ ขอบคุณล่วงหน้าเลยแล้วกันครับ
<?
$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 อีกนะครับผม

















