这个查询会起作用吗?它效率最高吗?
SELECT * FROM `posts`
WHERE MATCH (`title`, `body`)
AGAINST ('search terms' IN BOOLEAN MODE)
AND `price` BETWEEN '100' AND '1000'
AND (`postinto` = 'cat1' OR `postinto` = 'cat2')
AND (`location` = 'loc1' OR `location` = 'loc2')
ORDER BY `id` DESC
LIMIT 0, 100;
Run Code Online (Sandbox Code Playgroud)
注意:值postinto和location将包含在PHP数组中,因此如果这将起作用,我计划循环其数组以生成查询术语.有没有办法将整个数组传递给MySQL?而且,这两个条件有可能很长(十几个值).有没有更好的办法?
特别是我的问题是关于这个:
AND (`postinto` = 'cat1' OR `postinto` = 'cat2')
AND (`location` = 'loc1' OR `location` = 'loc2')
Run Code Online (Sandbox Code Playgroud)
可能值的示例是"社区|组","买卖 - 交易|电子",其中在|类别之前,之后|是子类别.如果我正在搜索整个类别,我想将查询的这一部分更改为:
AND (`postinto` LIKE 'category|%' OR `postinto` = 'this'
Run Code Online (Sandbox Code Playgroud)
我有全文搜索的正确索引,我的问题是关于OR子句.您是否可以在一个查询中使用OR的最大次数?这种语法是否正确?
谢谢
实际上有.IN语句可以在这里帮助你.
您的查询将变为如下所示:
SELECT * FROM `posts`
WHERE MATCH (`title`, `body`)
AGAINST ('search terms' IN BOOLEAN MODE)
AND `price` BETWEEN '100' AND '1000'
AND `postinto` IN ('cat1', 'cat2')
AND `location` IN ('loc1', 'loc2')
ORDER BY `id` DESC
LIMIT 0, 100;
Run Code Online (Sandbox Code Playgroud)