2011-05-31 49 views
7

我在业务控制器中使用普通搜索功能。但 现在需要实现完整的文本搜索与分页可以让任何人提供想法或样本? 我使用的MySQL与MyISAM的脊髓痨cakephp中的全文搜索?任何示例

,这我的表结构,字段标粗体需要你有created your FULLTEXT indices这并没有不同,在所有正常PAGINATE条件 搜索

CREATE TABLE IF NOT EXISTS businesses ( 
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    created date NOT NULL, 
    modified datetime NOT NULL, 
    user_id bigint(20) NOT NULL, 
    slug varchar(255) NOT NULL, 
    **`name` varchar(255) NOT NULL,** 
    **street_name varchar(255) DEFAULT NULL,** 
    **shopping_center varchar(255) DEFAULT NULL,** 
    state_id int(10) NOT NULL, 
    suburb_id int(10) NOT NULL, 
    zip_code varchar(12) DEFAULT NULL, 
    website varchar(250) DEFAULT NULL, 
    email varchar(255) DEFAULT NULL, 
    phone_no varchar(255) NOT NULL, 
    mobile_no varchar(255) DEFAULT NULL, 
    fax varchar(255) DEFAULT NULL, 
    is_active tinyint(1) NOT NULL DEFAULT '1', 
    PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

回答

9

使用,你只需要构建你的SQL多一点手动,最重要的是逃脱用户手动输入

$query = 'foobar'; // the user input to search for 
$escapedQuery = $this->Business->getDataSource()->value($query); 

$this->paginate['conditions'] = array("MATCH (Business.name) AGAINST ($escapedQuery)"); 
$businesses = $this->paginate(); 
+0

如果我需要使用多个字段,如name和street_name和shopping_center? – AnNaMaLaI 2011-05-31 07:17:52

+1

[阅读'MATCH ... AGAINST'的文档](http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html#function_match)并相应地构建您的索引和查询。 – deceze 2011-05-31 07:19:57

+0

是的。感谢我找到了解决方案 – AnNaMaLaI 2011-05-31 07:31:44