สวัสดีครับ พอดีผมเขียนหน้าค้นหา และ ทำ Query ดังนี้

                $sql = "SELECT *
                FROM products
                WHERE p_name like '%$keyword%'
                ORDER BY p_id desc";

  แต่ไม่ได้ผลครับ ที่อยากได้คือเหมือนอาจารย์ทำเว็บนี้น่ะครับ คือว่า หากเราพิมพ์ Search php mysql แล้ว ผลลัพธ์ที่ออกมาคือจะ Select แยกกันที่เราเคาะ เหมือน Google น่ะครับ คือจากมองเห็นเป็น 3 ข้อความและก็เหมืิอนดังเว็บนี้เลยครับ ไม่ทราบว่าผมต้องเขียน Query ยังไงครับ รบกวนช่วยตอบข้อสงสัยผมด้วยนะครับ ขอบพระคุณครับ
ดุนยา 30 Jun 2009 03:37
ผมคิดว่า คล้ายๆ แบบนี้นะ

 <?php      $keyword = 'php   mysql ajax ';          $keywordSQL = '';         $keywordList = array();         $keywordArray = explode(' ', $keyword);         foreach ( $keywordArray AS $val )     {         if ( trim($val) != '')         {             $keywordList[] = " p_name like '%$val%' ";         }     }       if ( count($keywordList) > 0)     {         $keywordSQL = " WHERE ( " . implode(" OR ", $keywordList) . " ) ";     }        $sql = "SELECT *                 FROM products                 {$keywordSQL}                 ORDER BY p_id desc";                     echo $sql; ?> 
ดุนยา 30 Jun 2009 04:36
ส่วนอันนี้ การทำสี

แสดงข้อความที่ค้นพบ


    function colorKeyword($keyword, $content)
    {
        $keywordArray = explode(" ", $keyword);
       
        $colorArray = array('red','green','orange','blue','pink');
       
        $i = 0;

        foreach ( $keywordArray as $key => $value)
        {       
            if ( trim( $value ) != "")  $content = str_replace($value, "<font color='{$colorArray[$i]}'>" . $value . "</font>", $content);
            $i++;
            if ( $i >= count($colorArray) ) $i = 0;
        }
        return $content;
    }
กรกฎ วิริยะ 30 Jun 2009 08:25

อา แม่นแล้วครับ หลักการก็คือ แยกข้อความค้นหา ออกเป็นหลายๆคำ แล้วค้นหาแต่ละคำโดยเชื่อมกันด้วย OR ครับ

แต่ผมจะมีพิเศษนิดนึง อีตรงที่ คำสั้น เช่น or is ผมจะไม่นำมาใช้ในการค้นหาครับ เพราะมันจะได้ผลลัพท์มากเกินไป นอกจากนั้น เทคนิคอื่นๆที่ใช้ก็คือ การจัดอันดับผลลัพท์การค้นหา โดยผลลัพท์ที่ตรงสุดจะแสดงก่อน (คล้ายๆ google) และก็มีการใช้ cache สำหรับการค้นหาในครั้งถัดๆไป เพื่อให้สามารถแสดงผลลัพท์การค้นหา ได้เร็วขึ้น ครับ

ดุนยา 30 Jun 2009 09:02
อยากรู้ด้วยครับว่า ทำงัยอะพี่ อิอิ
กรกฎ วิริยะ 30 Jun 2009 09:31
555+++

เรื่องมันยาว และ อัลกอริทึม มันก็ยังซับซ้อนอยู่ คงยังอธิบายให้เข้าใจในตอนนี้ไม่สะดวก เอาไว้ให้มันชัวร์ๆ ก่อน คงได้เขียนเป็นบทความ

แต่ที่ยากกว่า ผมว่ามันน่าจะเอาไปใช้ยาก เพราะมันออกแบบมาใช้งานเฉพาะกับ GCMS++ เนื่องจากโครงสร้างได้ถูกออกแบบไว้แล้ว ถ้าอยากจะลองดูก็แนะนำให้ประยุกต์เอาตามที่ผมเขียนไปก่อนก็แล้วกัน

1. การจัดอันดับผลการค้นหา หลักการก็คือการ ให้คะแนนผลลัพท์การค้นหา เช่น บทความที่มี ข้อความค้นหา ถูกต้อง 100% ตามข้อความค้นหา ก็ให้คะแนนเต็มไป บทความที่พบข้อความที่สุมบูรณ์มากน้อยต่างกัน ก็ให้คะแนนลดหลั่นกันลงมา (ตอนนี้ยากสุด และใช้เวลาในการประมวลผลนานสุด)
2. เรียงลำดับผลลัพท์ตามคะแนน
3. จากการที่ข้อ 1 ใช้เวลานาน ก็เลยทำ cache ขึ้นมา หลักการก็คือ บันทึกลงเป็นไฟล์ไว่บน server ถ้ามีการค้นหาในหน้าถัดไป ก็ไปเอามาจาก cache หรือ มีใครค้นหาข้อความเดียวกัน ก็สามารถเรียกจาก cache ได้เลย ไม่ต้องค้นหาใหม่
ธีรพล 30 Jun 2009 14:48
ขอบคุณมากครับผม
Popup Art 28 Apr 2010 11:34
ต้องการ อัลกอริทึม แบบนี้พอดีเลย ทำไงถึงจะได้มาศึกษา