消毒除蟲專業團隊完整服務,專業害蟲防治
病媒防治、環境消毒定期維護,免費現場勘查
窗簾專業搬家公司服務,正派經營
損壞理賠契約,保障您權益

首頁  •  j2h 論壇 • 程式設計討論     • 

[問題]搜尋功能怎麼寫?

房東:初學者
發表時間:2007-07-14


一般我是這樣寫我的搜尋功能
$query = "select distinct * from $table where $search_type like '%$keyword%' ORDER by id DESC LIMIT

可是如果要像雅虎那樣搜尋字中間有空格 搜尋 "網站 架設"
要像這樣的型態要怎麼寫??

因為我的寫法如果有空格就沒辦法搜尋??




  • 贊助網站       

    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!
    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務

  • 1 樓住戶:老貓
    發表時間:2007-07-14

    $search = explode(' ','123 456');
    $search_type = 'field';
    $table = 'test';
    $condition = '';
    foreach($search as $v){
    $condition .= "OR $search_type LIKE '$v'";
    }

    $query = "select distinct * from $table where 1 $condition ORDER by id";
    echo $query;

    範例在這兒!先利用explode將字串切割為陣列,再利用foreach去做迴圈!產生LIKE的語法就可以了

    2 樓住戶:初學者
    發表時間:2007-07-15

    我有個table其中一個欄位存放群組id:
    select field1 from table1 limit 2 :
    'a001,a002,a003,a010,a015,a030'
    'a003,a006,a007,a010,a020,a030'

    如果有個人屬於二個群組, 要select 出資料, 變成要用 or
    select * from table1 where field1 like '%a001%' or field1 like '%a003%'

    3 樓住戶:達人
    發表時間:2007-10-10

    你可以寫個函式做token
    像是你搜尋到的字串S="網站 架設"

    你可以根據空白取出資料「網站」、「架設」等字眼,變成
    arr[0] = "網站"
    arr[1] = "架設"
    ...
    arr[n] = XXX

    最下後query的時候,就變成
    where $search_type like '%$arr[0]%' and '%$arr[1]%' and ... and '%$arr[n]%'
    或是
    where $search_type like '%$arr[0]%' or '%$arr[1]%' or ... or '%$arr[n]%'

    4 樓住戶:貢丸
    發表時間:2007-10-10

    $input="網站 架設";
    $search=explode (" ", $input);
    $keyword="select distinct * from $table where $search_type like ";
    foreach($search as $k=>$v){
    $keyword.="'%$v%' or ";
    }
    $keyword=substr($keyword,0,strlen($keyword)-3);
    $keyword.="ORDER by id DESC";
    echo $keyword;


    5 樓住戶:阿寶
    發表時間:2007-10-10

    這裡只提供給您概念,實作的部份您自己再想想看:

    如果要按照您的想法來作的話,LIKE大概是不夠用了。
    因此在這裡要用到REGEXP。

    範例語法:
    SELECT ....... WHERE ...... REGEXP '[正規式]';

    所以您可以把搜尋的字串處理成一個正規式,
    再丟進SQL指令處理,
    至於該怎麼處理呢,我想這就是您該做的。

    6 樓住戶:舞棍
    發表時間:2007-12-21

    $input="網站 架設";
    $search=explode (' ',$input);
    $keyword="SELECT DISTINCT * FROM `$table` WHERE "; # $search_type 應該是欄位名稱沒錯吧?

    for($i=0;$i<count($search);$i++) #for和foreach的處理速度差不多,要快一點的話可以用while•(其實迴圈次數不多的話,相差只有零點幾秒而已..但有些設計師就是會計較那一點時間...)
    {
    $WHERE[]="`$search_type` LIKE '%$search[$i]%'";
    #說明: %指的是一以上的字元;要指定符合字元數量可以用?,例?abc?,表示1abc1可以符合搜尋條件,11abc1就不符合條件囉•
    }
    $keyword.=implode(' OR ',$WHERE); #將WHERE條件用 OR 結合起來,接在$keyword尾端
    $keyword.=" ORDER by `id` DESC"; #將排序條件接在$keyword尾端
    echo $keyword;



    7 樓住戶:小傑
    發表時間:2008-03-02


    $search = explode(' ','123 456');
    $search_type = 'field';
    $table = 'test';
    $condition = '';
    foreach($search as $v){
    $condition .= "OR $search_type LIKE '$v'";
    }

    $query = "select distinct * from $table where 1 $condition ORDER by id";
    echo $query;

    這樣@@?



     共 7 人回應  選擇頁數 【第1 頁】 

    姓名:
    佈告內容:
    其他選項: