- 此问题在此处已有答案**:
Get rows matching all items from an array(4个答案)
MySQL select all elements in array(3个答案)
昨天关门了。
这篇文章是8小时前编辑并提交审查的。
假设我有这个数组:$myArray =["您好"、"和"];
然后我有一个表,像这样:
| 身份证|正文|
| - ------|- ------|
| 1个|"你好,拉里!"|
| 第二章|"你好,鲍勃,你好吗?"|
| 三个|"你在忙什么?"|
如何运行如下查询
$stmt = $conn->prepare("SELECT text FROM myTable WHERE text CONTAINS allItemsIn(a) LIMIT 10");
$stmt->bind_param("a", $myArray);
$stmt->execute();
理想情况下,我希望查询只返回id为2的行,因为文本中同时包含字符串"hello"和"and"。我不希望数组中项的顺序很重要,所以即使数组中的"hello"和"and"反过来,它仍然应该返回行2。
我考虑过创建一个for循环,并针对$myArray中的每个项运行一个查询,其中的文本包含$myArray给定索引中的项,但是,我意识到这可能会变得相当慢,特别是在$myArray包含大量项的情况下。
一些要求类似问题答案的帖子使用WHERE x IN。我不能使用这个,因为文本永远不会出现在$myArray中的任何项目中,因为文本可能比$myArray中的一些项目更长。
2条答案
按热度按时间xnifntxz1#
您可以通过为搜索字符串中的每个单词添加一个
LIKE
并使用一个AND
将它们连接起来来实现这一点。但是,如果您希望按搜索字符串中的任何单词进行匹配,并根据匹配数量对它们进行排序:
对于类似以下的搜索词:“hello,你将如何处理此问题?”生成的查询如下所示:
你应该去掉非字母数字字符,如标点符号,大多数搜索引擎也会去掉常见的单词,如“the”,“is”和”but”(由于某种原因被称为“停止词”),因为它们的使用非常频繁,往往导致返回不太相关的项目,它也使查询速度更快。
zzlelutf2#
可以使用内聚将数组转换为字符串。如下所示: