2011-05-30 73 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)