我尝试使用三个不同的MYSQL查询来搜索单个列(类列表);目标是该列应包含_10_
,但不应包含_3_
或_15_
(示例值可能类似于_4_8_10_15_
,而在给定{{1} }。
我尝试了三种不同的方法,所有这三种方法都没有错误,但结果却不同:
1)FULLTEXT搜索(在类列表上启用了FULLTEXT索引)没有返回错误,也没有返回结果。
_15_
2)简单的LIKE子句返回516行。
SELECT classlist, classcount FROM subgroupstest WHERE MATCH (classlist) AGAINST ('+10 -3 -15' IN BOOLEAN MODE)
3)LIKE / REGEXP混合返回了1,912个结果。一个示例返回第二种方法不是SELECT classlist, classcount FROM subgroupstest WHERE classlist LIKE "%_10_%" AND classlist NOT LIKE "%_3_%" AND classlist NOT LIKE "%_15_%"
-这是一个准确的结果,并且此结果中没有重复项,因此我不得不假设第二种方法(至少是第一种!)某种程度上缺少
_4_10_18_23_
在这一点上,我摇摇头,不确定发生了什么。我总是会尝试寻找更深层次的问题,但是有人可以验证我是否在正确执行REGEXP和/或FULLTEXT方法?经过最后几个小时的阅读和模仿后,看起来就像我在Google上看到的一样,但这是我第一次使用其中一种。
答案 0 :(得分:0)
根据评论,我找到了解决方案。首先,我将MYSQL条目设置为空白(在前面的示例中为const TextureData BLOCK_TEXTURE(8, 8);
const std::array<float, B_LAST * 6> TEXTURE_COORDS = make_array<float, B_LAST * 6>([](unsigned int index){ return index%2 == 0? tex_coord_x(TEXTURE_INDICES[index / 2]) : tex_coord_y(TEXTURE_INDICES[index / 2 + 1]); });
)。
然后,搜索工作如下:
4 8 10 15
SELECT classlist, classcount FROM subgroupstest WHERE MATCH (classlist) AGAINST ('+10 -3 -15' IN BOOLEAN MODE)
SELECT classlist, classcount FROM subgroupstest WHERE classlist LIKE "% 10 %" AND classlist NOT LIKE "% 3 %" AND classlist NOT LIKE "% 15 %"
有趣的是,简单的“ Like”版本比其他两个版本快2-3倍!全文也比REGEXP稍慢。