2011-05-30 57 views
2
// grab the search types. 
    $searchSQL = "SELECT * FROM jsprofile WHERE "; 

    $types = array(); 
    $types[] = isset($_GET['sicno'])?"`name` LIKE '%{$searchTermDB}%'":''; 
    $types[] = isset($_GET['sname'])?"`icno` LIKE '%{$searchTermDB1}%'":''; 
    $types[] = isset($_GET['sgender'])?"`gender` LIKE '%{$searchTermDB2}%'":''; 

    $types = array_filter($types, "removeEmpty"); // removes any item that was empty (not checked) 

    if (count($types) < 1) 
    $types[] = "`icno` LIKE '%{$searchTermDB}%'"; // use the body as a default search if none are checked 

     $andOr = isset($_GET['matchall'])?'AND':'AND'; 
    $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `icno`"; // order by title. 

    $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}"); 

// if (mysql_num_rows($searchResult) < 1) { 
    /// $error[] = "The search term provided {$searchTerms} yielded no results."; 

從此一切正常。我能搜索......然而,當我試圖連接兩個表..SQL自定義搜索功能:無法加入兩個表格

// grab the search types. 
    $searchSQL = "SELECT * FROM jsprofile INNER JOIN medi WHERE "; 

    $types = array(); 
    $types[] = isset($_GET['sicno'])?"`name` LIKE '%{$searchTermDB}%'":''; 
    $types[] = isset($_GET['sname'])?"`icno` LIKE '%{$searchTermDB1}%'":''; 
    $types[] = isset($_GET['sgender'])?"`gender` LIKE '%{$searchTermDB2}%'":''; 
    $types[] = isset($_GET['medical'])?"`medical` LIKE '%{$searchTermDB2}%'":''; 

    $types = array_filter($types, "removeEmpty"); // removes any item that was empty (not checked) 

    if (count($types) < 1) 
    $types[] = "`icno` LIKE '%{$searchTermDB}%'"; // use the body as a default search if none are checked 

     $andOr = isset($_GET['matchall'])?'AND':'AND'; 
    $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `icno`"; // order by title. 

    $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}"); 

// if (mysql_num_rows($searchResult) < 1) { 
    /// $error[] = "The search term provided {$searchTerms} yielded no results."; 

當我做這個..似乎沒有出來有什麼不對的查詢?

回答

1

你應該檢查MySQL的JOIN語法(http://dev.mysql.com/doc/refman/5.0/en/join.html

你需要把ON子句中有

這一行:

$searchSQL = "SELECT * FROM jsprofile INNER JOIN medi WHERE "; 

應該是這樣的:

$searchSQL = "SELECT * FROM jsprofile INNER JOIN medi On jsprofile.[key] = medi.[key] WHERE "; 

顯然,代替喲烏爾鍵名到該查詢

+0

嗯..它沒有真正的工作,它仍然顯示一個空白屏幕 – Kelvin 2011-06-07 06:12:59

1

對於初學者:

$searchSQL = "SELECT * FROM jsprofile INNER JOIN medi WHERE "; 

...只適用於MySQL的,這裏的INNER JOIN缺乏標準來鏈接表被解釋爲CROSS JOIN - 生產笛卡爾產品。這意味着它會產生行,但是每個jsprofile表將會有每個medi記錄,反之亦然。

只要有基於搜索條件的記錄,查詢就會返回結果 - 只是不好的。所以你必須解釋「什麼出來」的一個有用的答案...

二,使用:

$searchSQL = "SELECT * FROM jsprofile ... WHERE 1 = 1 "; 

......將讓你來連接額外的WHERE子句,只要他們以「AND ...」開頭:

$types[] = isset($_GET['sicno'])?" AND `name` LIKE '%{$searchTermDB}%'":''; 

......不需要您已經定義的邏輯。

第三,使用Full Text Search (FTS)會比在左側使用LIKE和通配符更快,因爲LIKE左側的通配符呈現該列上的任何索引都不可用。但是,MySQL FTS要求所搜索的表使用MyISAM引擎 - 尋找像Sphinx這樣的第三方工具來實現相同的功能。

WHERE MATCH(column1, column2) AGAINST ($searchTerm)