我正在实施基于代码的搜索功能,我有以下SQL来匹配我的某个表格中#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
列中的关键字。
示例:
tags
SQL:
row 1 tags column: car city night
row 2 tags column: truck city day
但是,如果用户搜索以空格分隔的多个关键字,例如“car city ...”,则查询应为:
WHERE MATCH(s.tags) AGAINST (+:keyword IN BOOLEAN MODE)
目前我只是
WHERE MATCH(s.tags) AGAINST ('+:keyword1 +:keyword2 +...' IN BOOLEAN MODE)
这不会产生我想要的东西,我相信它会产生:
$stmt->bindParam(":keyword", $keyword);
如果关键字数量未知,我将如何单独绑定每个关键字以产生该关键字?或者还有另一种方式吗?
答案 0 :(得分:0)
我相信我能够解决它。
使用单个占位符:
WHERE MATCH(s.tags) AGAINST (:keyword IN BOOLEAN MODE)
将关键字拆分为由空格分隔的单词数组:
$keywords = preg_split('/\s+/', $keyword);
$numKeywords = count($keywords);
然后在绑定参数时,使用加号:
连接每个关键字for ($i = 0; $i < $numKeywords; $i++){
$keywordBind .= "+".$keywords[$i]." ";
}
$stmt->bindParam(":keyword", $keywordBind);