我正在php / mysql中构建搜索功能,我正在寻找合适的MySql函数。我的表看起来像这样:
id | text
--------------------------------------
1 | I like pony's.
2 | Do you like fish?
3 | We like fishes!
我想在列'text'中搜索一个数组的确切值,例如:
$search_array = array('fish','dogs','cat','panda');
我正在寻找合适的MySql函数来仅返回第二行(使用当前数组)。该数组可以包含数百个值。
我有6000多行,每天以+/- 400的速度增长。我已经尝试了REGEXP但是使用了大型数组,它返回相应的行之前花了大约10秒钟。
请帮帮忙,我现在已经和你打了差不多整整3天......提前致谢!
答案 0 :(得分:1)
如果搜索数组是常量,或不经常更改,我建议另外两个表,'tags'和'tags-text'。
例如,示例中id为2的行包含fish,因为fish在我们的“tags”表中,新记录将放在“tags-text”表中。当您使用数组进行搜索时,可以搜索其中一个数组组件是否位于“tags-text”表中,并加入“text”表并返回text和id并执行您需要的操作。
其他表的结构:
'tags'表
id | tags
--------------------------------------
1 | fish
2 | dogs
3 | cats
'tags-text'表
text-id | tags-id
--------------------------------------
2 | 1
这是否有帮助/有意义
答案 1 :(得分:0)
好的我认为我找到了最简单的解决方案:让PHP创建mysql查询并使用WHERE LIKE解决它。
$search_array = array('fish','dogs','cat','panda');
$string = '';
foreach($search_array as $term) {
$string = $string."text LIKE '%".$term."%' AND ";
}
foreach循环的结果是:
"text LIKE '%fish%' AND LIKE '%dogs%' AND LIKE '%cat%' AND LIKE '%panda%' AND "
现在让我们删除该字符串的尾部并编写查询:
$string = substr($string, 0, -5); // removing " AND " at the end of the string
$query = "SELECT * FROM table WHERE $string";
$results = mysql_query($query);
感谢其他答案:)
答案 2 :(得分:-1)
好吧,也许你应该尝试将mysql和php混合一下。 这是伪代码
select 100-1000 rows at one time from db use strpos to check each element in your array against the text column if element found store it if 2 elements found break the loop else continue
答案 3 :(得分:-1)
这样的事可能......
$search_term = implode(",",$search_array);
SELECT * FROM your_table WHERE text IN ($search_term)";